原创 Stm32项目中遇到的一些问题以及解决办法

2016-1-10 16:16 1893 15 15 分类: MCU/ 嵌入式

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中,显示无数值

1.jpg

 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条评论)

登录后参与讨论
我要评论
0
15
关闭 站长推荐上一条 /2 下一条