打印
[应用相关]

STM32 USART中断小程序

[复制链接]
654|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerful1|  楼主 | 2015-3-28 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
尽管网上的例程一堆堆,但还是花了好几天时间才跑通了一个USART通过中断方式实现的小程序。相当无比地郁闷啊。记录一下遇到的问题:

1. 配置RCC的时机
在主程序中通过查询方式收发数据时,结果并不稳定。对比了ST提供的例程中的设置,将RCC配置提到了所有配置的最前面后,功能实现。结论:应先配置RCC,再初始化其他外设。

2. RAM下调试遇到的问题
在上述查询方式的基础上,增加对NVIC的配置,USART的中断设置,以及ISR中的处理过程,放到RAM下调试,无法进入ISR。有以下两个测试结果:1)在主程序while中调用USART_GetITStatus,判断USART中断事件是否发生及中断是否使能,结果为SET。2)在调试时看NVIC的寄存器,USART1已经enable了,说明寄存器已经写入。上述两点结果下,程序从理论上应该进入中断。百思不得其解之下,鬼使神差地把程序放到flash下,一切问题烟消云散,程序跑通,在ISR中处理了收发事件。
flash和ram下程序的不同动作,原因未知,做了如下一些对比(心疼我的flash啊):
file:///C:/Documents%20and%20Settings/admin/Application%20Data/Fetion/temp/04ff06e94f11fc911cd02c9241405315.png
T表示只设置了USART发送中断,R表示只设置了USART接收中断。可以看出,不是在FLASH的程序中是否设置过NVIC的问题。导致错误的原因可能是flash下和ram下程序的固件库版本不同。当程序加载到flash或ram中后,系统是如何运行程序的?两者之间是否有干扰和影响?这点需要进一步学习。

沙发
powerful1|  楼主 | 2015-3-28 21:59 | 只看该作者
在做2中的试验时,希望在flash内无程序时,在RAM中调试看结构。但用J-Flash ARM V4.08l擦除flash后,keil中无法调试,显示core is locked up, cpu halted。网上搜到说在J-Flash ARM V4.08l中target->unsecure chip->重新上电,就可以解锁。如法**制,失败。因此在2中的试验中只能在flash中烧入空程序。解决方法需要继续摸索。

使用特权

评论回复
板凳
runningwzf| | 2015-3-28 22:02 | 只看该作者
个人经验:没必要在RAM里面调试,我全部项目都是直接在Flash里面调试的,从来没有发现一个CPU的Flash被我弄坏的

使用特权

评论回复
地板
quray1985| | 2015-3-29 09:28 | 只看该作者
runningwzf 发表于 2015-3-28 22:02
个人经验:没必要在RAM里面调试,我全部项目都是直接在Flash里面调试的,从来没有发现一个CPU的Flash被我弄 ...

我也是,一直都在flash里面调试的,也没出过问题

使用特权

评论回复
5
搞IT的| | 2015-3-29 10:31 | 只看该作者
quray1985 发表于 2015-3-29 09:28
我也是,一直都在flash里面调试的,也没出过问题

我也是:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

430

帖子

4

粉丝