USART:
1.
问题描述:使用中断接收数据时,DR中数值正确,但是RXNE始终是0,没有置位。
solution:经过半天的检查以后,发现在中断函数中使用错了一个函数,应该使用USART_GetFlagStatus(USART1, USART_IT_RXNE)来判断RXNE状态,却错使用了USART_GetITStatus函数。
2.
问题描述:进入IDLE中断无法退出
solution:清除IDLE的方式不对,正确的清除方式见《stm32中文参考手册》P540
由软件序列清除该位(先读USART_SR,然后读USART_DR)
注意:IDLE位不会再次被置高直到RXNE位被置起(即又检测到一次空闲 总线),初始上电后,idle位也是处在未置位的情况下。
3.
问题描述:如何使用dma接收未知长度的uart数据。
solution:参考http://wenku.baidu.com/link?url=UyJuXeoTlk1NzY-Jo1vSuvz1gwT2M2tO24SBUT2qx6_Y1X01V9sSv_ITE2R0MeNqgQ1zmqV1pgISBCDZP47c35RVkD4ZbiXOWZ34lbdHvXe 和http://www.amobbs.com/thread-5486343-1-1.html使用IDLE位来判断接收结束的方式
调试:
1.
问题描述:一个字符串在watch中,显示无数值
solution:在上面右键 选择16进制方式
2.
问题描述:在中断中使用了#if XYZ....#endif语句。没有报错,但是没法进入中断
solution:后来发现在该_it.c的头文件中没有包含 #define XYZ 1。包含该文件就解决了问题。
3.
问题描述:发现有一段条件编译的代码无法进入执行。
solution:把#if。。。。#elif 。。。#else。。#endif改成两端#if。。。#endif就解决了。
编程:
1.问题描述:有些对于某些寄存器写操作没有相关的函数
solution:直接寄存器操作,比如DMA1_Channel5->CNDTR = 2;
文章评论(0条评论)
登录后参与讨论