3986.net
小网站 大容量 大智慧
当前位置:首页 >> 信息与通信 >>

STM32 中断法 USART 串口简单使用

STM32 中断法 USART 串口简单使用 首先配置时钟: 这里我拿 USART2 说事: RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //USART2 和 USART3 都在在 APB1 上而 USART1 是在 APB2 上的 设置 GPIO: GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO |ENABLE); // A2 做 T2X GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); // A3 做 R2X GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); 配置 SUART2: USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; USART_StructInit(&USART_InitStructure); USART_ClockStructInit (&USART_ClockInitStructure); USART_ClockInit(USART2, &USART_ClockInitStructure); USART_Init(USART2, &USART_InitStructure); USART_Cmd(USART2, ENABLE); USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //开启 SUART2 的接收中断同理还有【看图】 然后中断服务程序:这个自己在 stm32f10x_it.c 添加就可以了。 void USART2_IRQHandler(void) { //接收中断 if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); Uart2_Get_Data=USART_ReceiveData(USART2); Uart2_Get_Flag=1; } //溢出-如果发生溢出需要先读 SR,再读 DR 寄存器则可清除不断入中断的问题[牛人说要这样] if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET) { USART_ClearFlag(USART2,USART_FLAG_ORE); //读 SR 其实就是清除标志 USART_ReceiveData(USART2); //读 DR } } 然后在 main 里检测 Uart2_Get_Flag if(Uart2_Get_Flag) { Uart2_Get_Flag=0; USART2_Puts("\r\n 2 获取到串口 2 数据:");

USART2_Putc(Uart2_Get_Data); USART2_Puts("\r\n"); } 写法就比较灵活了其实中断实在是强大。


网站首页 | 网站地图 | 学霸百科 | 新词新语
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com