野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9086|回复: 1

【勘误贴】USART中断服务函数

[复制链接]
发表于 2017-11-29 21:28:46 | 显示全部楼层 |阅读模式
本帖最后由 拖延症晚期 于 2017-11-29 21:52 编辑

      学习火哥的教材到USART这一章节,我曾尝试把串口收发函数写在中断服务函数里面,想实现用串口发送数据,再通过串口回传显示,
然而下载运行后发现无法显示,在中断函数中加入点亮LED的语句,下载运行后LED也不亮,所以应该是没有进中断,仔细检查多次也没有
发现问题,回过头来看火哥的 USART1 接发例程,果然也是只能发不能收,同样是没有进入接收中断函数,多次调试后终于找到原因,现
在分享给大家。

      先来看例程的接收中断函数代码
  1. void DEBUG_USART_IRQHandle(void)
  2. {
  3.   uint8_t ucTemp;
  4.         if(USART_GetITStatus(DEBUG_USART,USART_IT_RXNE)!=RESET)
  5.         {               
  6.                 ucTemp = USART_ReceiveData( DEBUG_USART );
  7.                 USART_SendData(DEBUG_USART,ucTemp);   
  8.         }         
  9. }        
复制代码
      bsp_debug_usart.h头文件的开头作了定义,#define DEBUG_USART   USART1,应该是为了方便移植,上面的中断函数名的一部分也用了这个宏名,实际上应该是 void USART1_IRQHandler(void)(中断函数名必须与system_stm32f4xx.c中预定义的名字保持一致)。


      我在调试中试着把 DEBUG_USART_IRQHandler 改为 USART1_IRQHandler ,没想到问题迎刃而解,成功进入中断,实现串口接收回显!所以我认为中断函数名称的那一部分应该是没有实现宏替换,至于为什么,是C语言语法问题还是其他,本渣就不清楚了,各位大神怎么看?

回复

使用道具 举报

发表于 2017-11-30 08:53:37 | 显示全部楼层
确认你的宏DEBUG_USART_IRQHandle 值为USART1_IRQHandler,应该是打错了某些字母,正常是可以的,我们一直这样用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-24 01:17 , Processed in 0.030469 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表