虽然网上的例程一堆堆,但仍是花了好几天时刻才跑通了一个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啊):
T表明只设置了USART发送中止,R表明只设置了USART接纳中止。能够看出,不是在FLASH的程序中是否设置过NVIC的问题。导致过错的原因可能是flash下和ram下程序的固件库版别不同。当程序加载到flash或ram中后,体系是怎么运转程序的?两者之间是否有搅扰和影响?这点需求进一步学习。
3. 其他问题
在做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中烧入空程序。解决方法需求持续探索。