- 主题:请教一下stm32 接收串口数据丢失的问题
买的一块现成的板,程序都配置现成的拿来做一些小应用
主函数里用一个库函数设置优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
随着应用上的推进 上位机一次性发送20多个字节的数据 到开发板上无法正常接收 猜测问题应该是EXTI_IRQHandler的问题 这个好像中断优先级最高? 每5ms自动执行一次 这样串口有时候来不及一次性接收20多个字节 搜索发现一般提示用DMA
请教一下 除了这个DMA 在现有方式下 有什么办法来规避上边的问题吗
如果用DMA的话 应该要重写串口的中断处理 和串口初始化函数 另外加上DMA的相关配置 这样主函数中的NVIC_PriorityGroupConfig是否被影响呢 有变动的必要吗
--
FROM 106.39.0.*
中断直接送进缓冲区啊...ring buffer是处理这种流式接口的标配
--
FROM 114.243.201.*
这个要看hw的fifo大小,如果有耗时高的其它中断在跑(超过fifo size * 字节 T),那无解,换成dma也没用(除非你中断可以抢占且dma中断优先级高)。所以各个中断里尽量少做事务处理,丢到一个sw的buffer中就可以退出中断了,外面整个大loop再去做具体的事务
【 在 scanworld 的大作中提到: 】
:
: 买的一块现成的板,程序都配置现成的拿来做一些小应用
: 主函数里用一个库函数设置优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
:
: 随着应用上的推进 上位机一次性发送20多个字节的数据 到开发板上无法正常接收 猜测问题应该是EXTI_IRQHandler的问题 这个好像中断优先级最高? 每5ms自动执行一次 这样串口有时候来不及一次性接收20多个字节 搜索发现一般提示用DMA
#发自zSMTH@80586
--
FROM 113.118.100.*