你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
爱电子辉辉 发表于 2019-12-19 18:38 楼主,你看,是不是这个原因,选择PA4的时候,串口2哪里出现了警告。。 ...
mylovemcu 发表于 2019-12-19 08:31 你检查一下 是不是抢占优先级和响应优先级设置反了 现在实际设置的是响应优先级?? 最好把响应优先级也 ...
pkoko 发表于 2019-12-20 00:32 1、抢占优先级,子优先级都是通过下面HAL_NVIC_SetPriority()这个函数设置的。该函数的代码如下(ST的原版 ...
radio2radio 发表于 2019-12-22 15:16 我估计是,你MPU6050每5ms触发一次+传送大量数据(不知道你的I2C速度是多少?硬件I2C?),已经搞到CPU很繁 ...
pkoko 发表于 2019-12-27 14:57 参考各位的提醒和建议,分析了我的应用场景:MPU6050每隔20ms产生中断,在EXIT4回调函数中,I2C读取MP ...
奏奏奏 发表于 2019-12-27 19:15 基本原则上中断中只进行赋值与将标记位置位,然后在循环体中解析协议。 如果中断会在某一段短时间内集中 ...
STM32隐藏
5.18活动板子会不会是STM32L4呢
STM32 CUBE软件中找不到STM32L4系列单片机
Your UAT Feedback is needed within today.
应用
AAA
tiwen
BBBB
aaa
2222
楼主,你看,是不是这个原因,选择PA4的时候,串口2哪里出现了警告。。
选择UART2,实际只使用了 PA2(USART2_TX)、PA3(USART2_RX)两个引脚。PA4引脚的功能之一是UART2_CK,当将PA4的功能设置为UART2_CK时,不会出现“黄色三角感叹号”。
而当将PA4重映射为其它功能时,比如GPIO_EXIT4 或 GPIO_input 都会出现这个提示。应该是正常的。
1、抢占优先级,子优先级都是通过下面HAL_NVIC_SetPriority()这个函数设置的。该函数的代码如下(ST的原版代码),其中第2个参数就是抢占优先级,第3个参数是子优先级。CubeMX自动生成的代码就是这个函数设置,应该没有有错。
2、同时,也尝试了把UART2的优先级设置为 HAL_NVIC_SetPriority(USART2_IRQn, 1, 0); 把外部中断4优先级设置为 HAL_NVIC_SetPriority(EXTI4_IRQn, 3, 1); 这样无论如何,UART2的优先级都是高于外部中断4的。但是现象仍然依旧。
3、我使用的是STM32F103C8T6最小系统。为排除芯片问题,换了另一个最小系统模块。表现完全相同。应该不是芯片的问题。4、接下来考虑换一个UART试试,待测试后报告结果。
将UART2接收中断改为UART3接收中断,问题依旧。
看来还是中断的问题。还要进一步找原因
可以试一试,把UART Rx 的缓存搞大一些,在每一次5ms的间隙里面检查一下UART缓存有没有收到的指令。
采用的HAL硬件I2C,不是模拟I2C,速率是4M。
尝试降低了MPU6050的中断频率,MPU6050产生中断频率从200Hz(5ms),直到降低到16Hz(62.5ms)时,串口中断可以接收到数据(MPU6050中断频率16Hz以上时,串口中断无法正常接收数据)。但是串口中断接收一定数据后,不再持续中断接收。“一定”数据的个数似乎是随机的,目前测试与MPU6050的中断频率有关:当频率为16Hz时,大约能正常接收4组字节的数据(51个字节为一组,分组发送,每组之间有1秒以上时间间隔);当MPU6050中断频率为5Hz时,大约能正常接收30组字节数据。
这个方案选择是有问题的:20ms外部中断比较频繁,而UART2的发送速度较低。同时UART2中断接收,每收到一个字节中断一次,并尝试处理协议解析。CPU很繁忙。
改进方案:1)将UART2向上位机发送MPU6050数据从EXIT4回调函数中移到main()中 ; 2)将UART2接收改为DMA IDLE模式。DMA接收到数据后,协议处理放到main()中进行。
上述改进方案后,UART2可正常接收到上位机的控制命令,同时MPU6050每20ms中断读取也可正常进行。达到目标要求。
当前在EXIT4的回调函数中,还要一部分进行数据处理,协议解析的的函数。后续也可考虑移到main()中,进一步降低中断占用时间。
再次感谢各位的建议。
基本原则上中断中只进行赋值与将标记位置位,然后在循环体中解析协议。
如果中断会在某一段短时间内集中更新数据的话,还需要用到消息队列,然后在循环体中将消息队列中的数据读取出来,一条一条按协议解析出来。
是的。当初想着没多少数据,应该能应付。
经验教训就是中断的处理时间要尽量短