STM32串口中断接收和中断发送
2016-03-12 15:12
477 查看
STM32串口USART1中断接收和中断发送
先贴出中断函数:
发送字符串的函数:
发送单个字符的函数:
然后在中断函数外面发送数据的时候,打开发送中断。USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //USART_IT_TC
之后再贴出两个简单的串口接收和发送的测试小例子:
第一种:中断接收并把接收到的数据直接发送。
优点:简单,适合很少量数据传输。
缺点:无缓存区,并且对数据的正确性没有判断,数据量稍大可能导致数据丢失 。
第二种:中断接收之后判断数据头和数据尾,如果正确就直接发送出去。
9c97
先贴出中断函数:
void USART1_IRQHandler(void){ if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART1_Buffer[i++]=USART_ReceiveData(USART1); //USART1_Buffesh是一个自己定义的接收数组 if(i>3){ SendFlag = 1; } } if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){ //USART_IT_TC这里也可替换 if(Open_Send_Flag){ //这是一个发送的标志 uart1_sendstring(temp_data); USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //USART_IT_TC Open_Send_Flag = 0; } else{ USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //USART_IT_TC } } }
发送字符串的函数:
void uart1_sendstring(uint8_t* cp) { while((*cp)!='\0') { Usart1_Send_isr(*cp); cp++; } }
发送单个字符的函数:
void Usart1_Send_isr(uint8_t ch){ USART_SendData(USART1, (uint8_t)ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET ); //这里做缓冲区是否发送完判断 }
然后在中断函数外面发送数据的时候,打开发送中断。USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //USART_IT_TC
之后再贴出两个简单的串口接收和发送的测试小例子:
第一种:中断接收并把接收到的数据直接发送。
void USART1_IRQHandler(void){ unsigned char RxData; if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); RxData=USART_ReceiveData(USART1); RxData = RxData + 1; USART_SendData(USART1,RxData); } }
优点:简单,适合很少量数据传输。
缺点:无缓存区,并且对数据的正确性没有判断,数据量稍大可能导致数据丢失 。
第二种:中断接收之后判断数据头和数据尾,如果正确就直接发送出去。
9c97
void USART1_IRQHandler(void){ if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART1_Buffer[i++]=USART_ReceiveData(USART1); } if((USART1_Buffer[0] == 0x01) && (USART1_Buffer[i-1] == 0x02)){ Flag = 1; } if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET){ //溢出,不明白? USART_ClearFlag(USART1,USART_FLAG_ORE); USART_ReceiveData(USART1); } if(Flag){ for(j = 0;j<20;j++){ USART_SendData(USART1,USART1_Buffer[j]); } } }
相关文章推荐
- Kotlin Android入门学习一
- 七大排序算法总结 JavaScript <堆还没写…………待续>
- event 事件 键盘控制div移动
- event 事件 keyCode
- CSS - 常用行、块级元素都有哪些?
- BZOJ 2097 USACO 2010 Dec Gold Exercise 奶牛健美操 二分答案 树形DP 贪心
- 记录准备看一下的linux开源小项目
- archlinux锁屏
- win10怎么修改系统日期时间?win10修改系统时间的方法
- day31:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度
- mysql实现主从复制
- 黄金连分数(高精度浮点值)
- QT中QPainterPath类的功能和使用方法
- C++第1-1次上机实验
- 20145120 《Java程序设计》第2周学习总结
- C#求和
- Python学习记录九
- C 简易基础开发框架 - simple c
- 从NSGA到 NSGA II
- RatingBar的使用