[STM32F1] UART4_IRQHandler()中断问题

[复制链接]
6718|13
 楼主| 复仇之矛 发表于 2015-5-29 11:29 | 显示全部楼层 |阅读模式
我使用的是STM32F103ZET 512K,启动文件使用的是.HD,发送正常,UART4->DR中也接收到我要的字节信息,但是接收中断服务函数中if(res==0x4F)的判断没有进行,即syn_state的值没有变为“0”,求解法?:'(
  1. void uart4_init(u32 pclk,u32 bound)
  2. {
  3.   RCC->APB2ENR|=1<<4;
  4.         RCC->APB1ENR|=1<<19;
  5.         GPIOC->CRH&=0XFFFF00FF;
  6.         GPIOC->CRH|=0X00008B00;//

  7.         RCC->APB1RSTR|=1<<19;
  8.         RCC->APB1RSTR&=~(1<<19);

  9.         UART4->BRR=(pclk*1000000)/(bound); // ²¨ÌØÂÊÉèÖà      
  10.         UART4->CR1|=0X200C;  //1λֹͣ,ÎÞУÑéλ.
  11. #ifdef EN_UART4_RX                  //Èç¹ûʹÄÜÁ˽ÓÊÕ
  12. //ʹÄܽÓÊÕÖжÏ
  13. UART4->CR1|=1<<8;    //PEÖжÏʹÄÜ
  14. UART4->CR1|=1<<5;    //½ÓÊÕ»º³åÇø·Ç¿ÕÖжÏʹÄÜ                   
  15. MY_NVIC_Init(3,3,UART4_IRQn,2);//×é2£¬×îµÍÓÅÏȼ¶
  16. #endif
  17. }

  18. #ifdef  UART4_RX_EN
  19. u8 UART4_RX_BUF[64];

  20. void UART4_IRQHandler(void)
  21. {
  22. u8 res;
  23. if(UART4->SR&(1<<5))   // ?????
  24. {
  25.   res=UART4->DR;
  26.         if(res==0x4F)syn_state=0; //ºÏ³É²¥·ÅÍê³É??´Ë±äÁ¿µÄÖµ²»Êǰ´ÖжÏËù
  27.                                                                 //¸³ÖµÒ»Ñù±ä³É0£¬µ«ÊÇUART4->DRȷʵ½ÓÊÕ¶¼
  28.                                                          //0x4f???????????       
  29.   }
  30. }
  31. #endif
 楼主| 复仇之矛 发表于 2015-5-29 11:33 | 显示全部楼层
自己顶下,大家说说可能性吧,在线等。。。
mmuuss586 发表于 2015-5-29 12:17 | 显示全部楼层
能进入中断;
说明初始化没啥问题;

res是你收到的数据,未执行,也许你发的数据就不对;
用示波器看下数据;
luofeng2g 发表于 2015-5-29 12:19 | 显示全部楼层
直接把收到数据打印出来看下不就知道了!
 楼主| 复仇之矛 发表于 2015-5-29 14:37 | 显示全部楼层
mmuuss586 发表于 2015-5-29 12:17
能进入中断;
说明初始化没啥问题;

收到的数据是正确的,这个数据是和我板子通信其自身接收正确数据帧后回传的数据
 楼主| 复仇之矛 发表于 2015-5-29 14:40 | 显示全部楼层
luofeng2g 发表于 2015-5-29 12:19
直接把收到数据打印出来看下不就知道了!

我在线调试,再看UART4->DR寄存器中的值是有变化的,并且值都是正确的数值,最后就是我需要的这个数据0x4f
 楼主| 复仇之矛 发表于 2015-5-29 14:50 | 显示全部楼层
复仇之矛 发表于 2015-5-29 14:40
我在线调试,再看UART4->DR寄存器中的值是有变化的,并且值都是正确的数值,最后就是我需要的这个数据0x4 ...

在线仿真的值

串口在线仿真的值

串口在线仿真的值
 楼主| 复仇之矛 发表于 2015-5-29 15:07 | 显示全部楼层
我调取res的值查看后,虽然res=UART4->DR;但是两者的值不一样,接收的最后res的值保持初始值,UART4->DR的值是0x4f这是为啥?
 楼主| 复仇之矛 发表于 2015-5-29 15:47 | 显示全部楼层
问题已摸索出来了,共享下,UART4在配置中使用到#ifdef EN_UART4_RX(有帖子说的是默认值为1),注释是:如果使能了接收;而在头文件中有#define EN_UART4_RX,但是在实际仿真中,这个没有起到作用,将这些都注销掉后,添加这句:UART4->CR1|=1<<2;使能接收,既可以正常接收并从UART4->DR中读取数据;
luofeng2g 发表于 2015-5-29 16:09 | 显示全部楼层
复仇之矛 发表于 2015-5-29 15:47
问题已摸索出来了,共享下,UART4在配置中使用到#ifdef EN_UART4_RX(有帖子说的是默认值为1),注释是:如 ...

所以最好的办法,使用串口打印出来,到底有没有一目了然!!!
 楼主| 复仇之矛 发表于 2015-5-29 18:11 | 显示全部楼层
luofeng2g 发表于 2015-5-29 16:09
所以最好的办法,使用串口打印出来,到底有没有一目了然!!!

恩,谢谢,以后有类似问题我会按照你的建议测试的。:handshake
戈卫东 发表于 2015-5-29 19:07 | 显示全部楼层
可能sync_state定义问题。
没有定义成 volatile int sync_state这样?
mmuuss586 发表于 2015-5-30 08:38 | 显示全部楼层
复仇之矛 发表于 2015-5-29 18:11
恩,谢谢,以后有类似问题我会按照你的建议测试的。

都正确那就不应该有问题啊;
Ketose 发表于 2015-5-30 09:03 | 显示全部楼层
楼主写代码为什么不用ST定义好的宏,一堆数字好难看懂。一般人都不愿意看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

185

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部