stm32使用库函数编写USART还是很方便的,现在转几个例子:
/*************************************** 转载请注明出处:tedeum.iteye.com ****************************************/
首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=524
// STM32 USART1 (Tx PA.9, Rx PA.10) STM32F3-Discovery - sourcer32@gmail.com #include "stm32f30x.h" /**************************************************************************************/ void RCC_Configuration(void) { /* Enable GPIO clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); /* Enable USART clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); } /**************************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Connect PA9 to USART1_Tx */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7); /* Connect PA10 to USART1_Rx */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7); /* Configure USART Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART Rx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOA, &GPIO_InitStructure); } /**************************************************************************************/ void USART1_Configuration(void) { USART_InitTypeDef USART_InitStructure; /* USART resources configuration (Clock, GPIO pins and USART registers) ----*/ /* USART configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* USART configuration */ USART_Init(USART1, &USART_InitStructure); /* Enable USART */ USART_Cmd(USART1, ENABLE); } /**************************************************************************************/ int main(void) { RCC_Configuration(); GPIO_Configuration(); USART1_Configuration(); while(1) { while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // Wait for Empty USART_SendData(USART1, 0x49); // Send 'I' } while(1); // Don't want to exit } /**************************************************************************************/ #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif
接下来是使用中断的方法,使用USART3,管脚pd8,pd9,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/STM32F4%20USART%20receive%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=124
// STM32 USART IRQ TX/RX Loop (USART3 Tx PD.8, Rx PD.9) STM32F4 Discovery - sourcer32@gmail.com #include "stm32f4_discovery.h" volatile char StringLoop[] = "The quick brown fox jumps over the lazy dog\r\n"; /**************************************************************************************/ void RCC_Configuration(void) { /* --------------------------- System Clocks Configuration -----------------*/ /* USART3 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); /* GPIOD clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); } /**************************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /*-------------------------- GPIO Configuration ----------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Connect USART pins to AF */ GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3); GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3); } /**************************************************************************************/ void USART3_Configuration(void) { USART_InitTypeDef USART_InitStructure; /* USARTx configuration ------------------------------------------------------*/ /* USARTx configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART3, &USART_InitStructure); USART_Cmd(USART3, ENABLE); USART_ITConfig(USART3, USART_IT_TXE, ENABLE); USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); } /**************************************************************************************/ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /* Enable the USART3 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /**************************************************************************************/ void USART3_IRQHandler(void) { static int tx_index = 0; static int rx_index = 0; if (USART_GetITStatus(USART3, USART_IT_TXE) != RESET) // Transmit the string in a loop { USART_SendData(USART3, StringLoop[tx_index++]); if (tx_index >= (sizeof(StringLoop) - 1)) tx_index = 0; } if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) // Received characters modify string { StringLoop[rx_index++] = USART_ReceiveData(USART3); if (rx_index >= (sizeof(StringLoop) - 1)) rx_index = 0; } } /**************************************************************************************/ int main(void) { RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); USART3_Configuration(); while(1); // Don't want to exit } /**************************************************************************************/
最后,是使用DMA的方法,使用usart5,管脚:pc12,pd2,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/DMA%20Memory%20To%20UART5&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=760
// STM32 UART5 DMA TX (Tx PC.12, Rx PD.2) STM32F4 Discovery - sourcer32@gmail.com #include "stm32f4_discovery.h" /**************************************************************************************/ void RCC_Configuration(void) { /* --------------------------- System Clocks Configuration -----------------*/ /* UART5 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE); /* GPIOC and GPIOD clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE); /* DMA1 clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); } /**************************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /*-------------------------- GPIO Configuration ----------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // PC.12 UART5_TX, potential clash SDIN CS43L22 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // PD.2 UART5_RX GPIO_Init(GPIOD, &GPIO_InitStructure); /* Connect USART pins to AF */ GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5); GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5); } /**************************************************************************************/ void UART5_Configuration(void) { USART_InitTypeDef USART_InitStructure; /* USARTx configuration ------------------------------------------------------*/ /* USARTx configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(UART5, &USART_InitStructure); USART_Cmd(UART5, ENABLE); } /**************************************************************************************/ char Buffer[] = "The quick brown fox jumps over the lazy dog\r\n"; void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Stream7); DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // Transmit DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Buffer; DMA_InitStructure.DMA_BufferSize = (uint16_t)sizeof(Buffer) - 1; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream7, &DMA_InitStructure); /* Enable the USART Tx DMA request */ USART_DMACmd(UART5, USART_DMAReq_Tx, ENABLE); /* Enable DMA Stream Transfer Complete interrupt */ DMA_ITConfig(DMA1_Stream7, DMA_IT_TC, ENABLE); /* Enable the DMA RX Stream */ DMA_Cmd(DMA1_Stream7, ENABLE); } /**************************************************************************************/ void DMA1_Stream7_IRQHandler(void) { /* Test on DMA Stream Transfer Complete interrupt */ if (DMA_GetITStatus(DMA1_Stream7, DMA_IT_TCIF7)) { /* Clear DMA Stream Transfer Complete interrupt pending bit */ DMA_ClearITPendingBit(DMA1_Stream7, DMA_IT_TCIF7); } } /**************************************************************************************/ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure the Priority Group to 2 bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Enable the UART5 RX DMA Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream7_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /**************************************************************************************/ int main(void) { RCC_Configuration(); NVIC_Configuration(); GPIO_Configuration(); UART5_Configuration(); DMA_Configuration(); while(1); // Don't want to exit } /**************************************************************************************/ #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /** * @} */ /**************************************************************************************/
相关推荐
在给定的“stm32中usart例子”中,包含的资源很可能是为了帮助开发者理解和实践STM32的USART功能。 STM32的USART主要功能包括: 1. 异步通信:这是最常见的模式,不依赖外部时钟,通过起始位、数据位、奇偶校验位...
stm32 的usart模块使用方便,在很多地方都有应用
在STM32的开发过程中,理解和掌握USART的配置和使用是至关重要的。 首先,我们要了解USART的基本概念。USART是一种全双工、异步通信协议,可以同时进行发送和接收数据。它通过串行接口传输数据,通常采用起始位、...
总之,"stm32L151c8t6 USART1例程"提供了一个基础的串口通信模板,开发者可以通过这个例子学习如何在STM32L151C8T6上配置和使用USART1,进而进行更复杂的串行通信设计。在实际开发中,结合文档、示例代码和实践,...
STM32F407系列是意法半导体(STMicroelectronics)推出的高性能微控制器,它基于...这个实例为初学者提供了一个基础的STM32F407 USART通信模板,通过分析和学习,可以进一步掌握STM32的USART通信以及MDK5的使用方法。
为了验证USART通信,通常使用串口终端软件(如RealTerm、Putty等)连接到STM32的UART端口,进行发送和接收数据的测试。 通过以上步骤,你可以成功地在STM32F103上实现串口通信。实际项目中,可能还需要考虑波特率...
本文将深入探讨STM32 USART的初始化、`printf`和`scanf`的使用,以及如何通过这些知识点来理解和应用在实际项目中。 首先,让我们了解STM32 USART的初始化过程。初始化通常包括以下步骤: 1. **配置时钟**:确保...
这个压缩包中的代码例子覆盖了多个关键功能,有助于开发者更好地理解和掌握STM32F103的编程。 1、测试程序:这部分通常包含了一系列基础的函数测试,比如中断、定时器、GPIO等基本功能的验证,目的是确保硬件和软件...
在本压缩包"USART_test.zip"中,包含的是一个关于STM32单片机使用USART进行简单数据传输的应用实例,特别适合初学者了解和学习STM32的USART功能。 首先,让我们了解一下STM32的USART(通用同步/异步收发传输器)。...
在这个例子中,我们将详细探讨如何在STM32F03VET6芯片上实现USART的DMA收发功能。 首先,了解STM32的DMA模块是至关重要的。DMA控制器可以直接在内存和外设之间传输数据,而无需CPU干预。这在处理大量数据时特别有用...
在本资料"STM32 USART.zip"中,包含了STM32使用USART进行串行通信的相关代码,特别是针对printf函数的实现,使得通过USART实现打印调试变得更加方便。 首先,让我们详细了解STM32的USART模块。USART是一个高度可...
1. **串口通信**:STM32的串行通信接口(USART或UART)是其核心功能之一,广泛应用于设备间的数据传输。例程可能包括初始化配置、发送接收数据、中断处理以及错误检测等功能。通过串口,你可以实现STM32与PC或其他微...
STM32 串口转CAN 代码例程 含 1.STM32_LED ,2.STM32_USART,3.STM32_USART_LED_CAN500K,等几个例子程序,方便新手入门。 并含有C#上位机程序,,通过UART串口转CAN 发送接收数据。
这个“STM32 485小例子”很可能是包含了一个简单的示例代码,演示了如何在STM32上配置和使用USART进行485通信。这个代码可能涵盖了上述所有步骤,通过注释和示例代码帮助初学者理解和实现这一功能。 总结一下,STM...
在本例程中,我们关注的是如何使用STM32F405RGT6的串行通信接口(USART)进行数据传输。 串口通信是微控制器与外部设备之间进行数据交互的一种常见方式,尤其适用于调试和监控。在这个特定的例程中,我们将重点讨论...
这个压缩包提供的资料专注于STM32F103C8T6上的串行通用同步/异步收发传输器(USART)的编程,非常适合想要学习STM32基础应用的人。 USART是一种通信接口,用于设备间的全双工、同步或异步数据传输。在STM32中,...
1、内容概要:使用STM32CubeMX生成源码,主芯片为STM32L431RCT6实现串口通过DMA收发,采用8MHz的外部晶振作为时钟源。 2、适用人群:适合想要入坑嵌入式的新手、适合学习STM32/ARM开发板的新手、适合STM32L431RCT6...
STM32F405RGT6是一款基于ARM Cortex-M4...通过这个教程,开发者不仅可以学习如何使用STM32F4系列微控制器,还可以掌握线性CCD传感器的应用、图像处理算法以及OLED显示屏的驱动,这些都是嵌入式系统开发中的重要技能。
STM32串口通信是嵌入式开发中的基础部分,尤其在使用STM32微控制器进行数据传输时,USART(通用同步/异步收发传输器)起着至关重要的作用。本示例程序"USART_test.rar"是针对STM32的串口1进行测试的一个项目,它使用...
1. **硬件配置**:确保STM32F103的UART接口(通常为USART1或USART2)被正确配置为RS-485模式。这包括设置波特率、奇偶校验、停止位等参数,并启用DMA(Direct Memory Access)以提高传输效率。 2. **库函数选择**:...