历史上的今天
今天是:2024年12月21日(星期六)
2021年12月21日 | STM32HAL库中断模式串口收发
2021-12-21 来源:eefocus
一.简单了解
串口模式实现有三种
1.普通模式:在主函数中接收函数
2.中断模式:产生的不影响主程序运行
3. DMA模式:与主函数互不影响,独立运行
本文记录第二种普通模式。
学习目标是:实现中断串口的数据收发,发送数据时LED灯电平翻转。
二.步骤
在上一篇文章基础上,传送门:STM32HAL库普通模式串口收发
需在STM32CUBEMX软件中USART1的NVIC SETTING中使能中断,然后再次生成代码。
【小tips:如果在用户区域块编写代码的话不会被覆盖】
1-宏定义串口中断
#define UART1_IRQ
uint8_t TdataIRQ[]={"welcome to uart irq!rn"};//测试数组
uint8_t Rdata;//存放接收数据
2-同样是在stm32l4xx_hal_uart.c中1611行找到函数
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
3-在main函数中添加如下代码
#ifdef UART1_IRQ
HAL_UART_Receive_IT(&huart1,&Rdata,1);//触发中断接收
HAL_UART_Transmit_IT(&huart1,TdataIRQ,sizeof(TdataIRQ));//发送我们使用的IRQ TEST
#endif
while(1)
{
#ifdef UART1_IRQ
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
printf("welcome to uart1 IRQ test!rn");
HAL_Delay(2000);
#endif
}
4-修改回调函数
//回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
#ifdef UART1_IRQ
//把接收到的数据发送回屏幕,发送函数要在接收函数前面
HAL_UART_Transmit(&huart1,&Rdata,1,0xff);
HAL_UART_Receive_IT(&huart1,&Rdata,1);
#endif
}
三.总结
1.在串口可以发现,使用串口中断实现数据的收发,是不影响while中的循环的,不影响主程序运行。
2.如果是在普通模式下使用串口,添加延时函数HAL_Delay(2000),会导致程序反应不过来。
史海拾趣
|
本人从事安防行业5年,一路走来,一直在做监控摄像机这一块,发现自己组装生产摄像机,有以下几大优势,供大家参考: 第一:摄像机本身组装很简单,技术含量不高,不如自己动手,还学会了组装,与摄像机内部结构。 第二:自己组装生产摄像机,价格 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 自2009年年底起,3D在国内成为了“时尚”的代名词,继3D电影《阿凡达》、《爱丽丝梦游仙境》在中国市场赚得盆满钵满,3D似乎也成为了报刊企业的又一掘金点。 2010年4月16日,湖北《十堰晚 ...… 查看全部问答> |
|
先祝各位达人元旦快乐! 我老板现在想开发CDMA的通信模块,就是网上很多卖的那种,可以通过串口或其他通用接口进行CDMA无线通信,但我查了很长时间仍然没有头绪……望各位达人指点一二: 用于开发CDMA模块一般都有什么芯片?我看网上大部分都是高 ...… 查看全部问答> |
|
Powerpc现在编译的文件系统是jff2格式,用串口线先传倒powerpc的RAM里,再复制进flash,但是现在文件系统似乎限制了大小,如果传3M左右就能正常启动,如果大于4M就不能正常启动,系统会不停重启。但是如果系统能正常启动后,用FTP上传文件,则没有 ...… 查看全部问答> |
|
之前用的是vxworks+Tornado开发方式,一切比较顺利!! 最近单位买了最新版的vxworks,开发环境是workbench,刚接触,本打算先做启动软盘尝试启动vxworks,可发现每次编译后,目标机出现v1.6++++++++++++++++++然后又重起,尝试了各种方法,都是这样,请各位 ...… 查看全部问答> |
|
S3C44B0X那块板子,能在线调试并且LCD显示正常,但是将程序烧录进去后,却发现LCD没有显示了。这是怎么回事呢?有哪位大虾遇到过同样的问题吗? 做LED实验却不管在线调试还是将程序烧录进去,都能得到正确的结果。… 查看全部问答> |




