STM32串口驱动例程
定义:
TXD1----- PA9-US1-TX RXD1----- PA10-US1-RX 速率:115200,n,8,1 [cpp] view plaincopyprint?
1. /* Includes ------------------------------------------------------------------*/ 2. #include \ 3. #include \ 4. #include \ 5. #include \ 6. #include \ 7. 8. 9.
10. /* Private variables ---------------------------------------------------------*/ 11. USART_InitTypeDef USART_InitStructure;
12. uint8_t TxBuffer1[] = \13. uint8_t RxBuffer1[],rec_f,tx_flag; 14. __IO uint8_t TxCounter1 = 0x00; 15. __IO uint8_t RxCounter1 = 0x00; 16.
17. uint32_t Rec_Len; 18. 19.
20. /* Private function prototypes -----------------------------------------------*/ 21. void RCC_Configuration(void); 22. void GPIO_Configuration(void); 23. void NVIC_Configuration(void); 24.
25. void Delay(__IO uint32_t nCount);
26. void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...); 27. char *itoa(int value, char *string, int radix);
28. void USART_Config(USART_TypeDef* USARTx); 29. 30.
31. GPIO_InitTypeDef GPIO_InitStructure; 32. USART_InitTypeDef USART_InitStruct;
33. USART_ClockInitTypeDef USART_ClockInitStruct; 34.
35. /**************************************************************************** 36. * 名 称:void ili9325_DrawPicture(u16 StartX,u16 StartY, u8 Dir,u8 *pic) 37. * 功 能:在指定座标范围显示一副图片 38. * 入口参数:StartX 行起始座标 39. * StartY 列起始座标 40. * Dir 图像显示方向 41. * pic 图片头指针 42. * 出口参数:无
43. * 说 明:图片取模格式为水平扫描,16位颜色模式 取模软件img2LCD 44. * 调用方法:ili9325_DrawPicture(0,0,0,(u16*)demo);
45. ****************************************************************************/ 46. void USART_Config(USART_TypeDef* USARTx){
47. USART_InitStructure.USART_BaudRate = 115200; //速率
115200bps
48. USART_InitStructure.USART_WordLength = USART_WordLength_8b; //
数据位8位
49. USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止
位1位
50. USART_InitStructure.USART_Parity = USART_Parity_No; //无校验
位
51. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlo
wControl_None; //无硬件流控
52. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_T
x; //收发模式 53.
54. /* Configure USART1 */
55. USART_Init(USARTx, &USART_InitStructure); //配置串口参
数函数
56. 57.
58. /* Enable USART1 Receive and Transmit interrupts */
59. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能
接收中断
60. USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //使能
发送缓冲空中断 61.
62. /* Enable the USART1 */
63. USART_Cmd(USART1, ENABLE); 64. }
65. /**************************************************************************** 66. * 名 称:int main(void) 67. * 功 能:主函数 68. * 入口参数:无 69. * 出口参数:无 70. * 说 明: 71. * 调用方法:无
72. ****************************************************************************/ 73. int main(void) 74. { 75.
76. uint8_t a=0;
77. /* System Clocks Configuration */
78. RCC_Configuration(); //系统时钟设置 79.
80. /*嵌套向量中断控制器
81. 说明了USART1抢占优先级级别0(最多1位) ,和子优先级级别0(最多
7位) */
82. NVIC_Configuration(); //中断源配置 83.
84. /*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口
线速度为50Mhz。PA9,PA10端口复用为串口1的TX,RX。
85. 在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成
功,由于用到了端口B, 因此要对这个端口的时钟
86. 进行使能,同时由于用到复用IO口功能用于配置串口。因此还要使能AFIO(复
用功能IO)时钟。*/
87. GPIO_Configuration(); //端口初始化 88.
89. USART_Config(USART1); //串口1初始化 90.
91. USART_OUT(USART1,\测试串口 *******\\r\\n\向串口1发送开机字
符。 92.
93. USART_OUT(USART1,\94. USART_OUT(USART1,\95. USART_OUT(USART1,\96. while (1) 97. {
98. if(rec_f==1){ //判断是否收到一帧有效数据 99. rec_f=0;
100. USART_OUT(USART1,\您发送的信息为: \\r\\n\101. USART_OUT(USART1,&TxBuffer1[0]);
102. if(a==0) {GPIO_SetBits(GPIOB, GPIO_Pin_5); a=1;} //LED1 V6
(V3板) V2(MINI板) 明暗闪烁
103. else {GPIO_ResetBits(GPIOB, GPIO_Pin_5);a=0; } 104. } 105. } 106. } 107.
108. /**************************************************************************** 109. * 名 称:void Delay(__IO uint32_t nCount) 110. * 功 能:延时函数 111. * 入口参数:无 112. * 出口参数:无 113. * 说 明: 114. * 调用方法:无
115. ****************************************************************************/ 116. void Delay(__IO uint32_t nCount) 117. {
118. for(; nCount != 0; nCount--); 119. } 120.
121. /**************************************************************************** 122. * 名 称:void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...) 123. * 功 能:格式化串口输出函数 124. * 入口参数:USARTx: 指定串口 125. Data: 发送数组 126. ...: 不定参数 127. * 出口参数:无
128. * 说 明:格式化串口输出函数
129. \回车符 USART_OUT(USART1, \130. \换行符 USART_OUT(USART1, \
131. \字符串 USART_OUT(USART1, \字符串是:%s\132. \十进制 USART_OUT(USART1, \133. * 调用方法:无
134. ****************************************************************************/ 135. void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...){ 136. const char *s; 137. int d; 138. char buf[16]; 139. va_list ap; 140. va_start(ap, Data); 141.
142. while(*Data!=0){ //判断是否到达字符串结束
符
143. if(*Data==0x5c){ //'\\' 144. switch (*++Data){
145. case 'r': //回车符 146. USART_SendData(USARTx, 0x0d); 147.
148. Data++; 149. break;
150. case 'n': //换行符 151. USART_SendData(USARTx, 0x0a);