
配置DMA循环模式,使用HAL_UART_Receive_DMA(&huart1,buffer,4)函数将串口数据循环发送到4个元素的buffer数组内,上位机20ms发送一次数据。理论上讲上位机发送数据的数量和顺序都是固定的——比如AABA,可是现在有干扰——有一次上位机多发送了一个数据——变成了CAABA,根据DMA循环原理,存到数组里的数据就变成了AAAB——并且还是根据DMA循环原理——数组里的数据至此之后永远都是AAAB,如何才能让它重新变成AABA呢?有没有办法能找到DMA自动递增的那个指针?把那个自动递增指针重新给它置零? |
STM32L433VCT6 进入STOP模式2之后,功耗依然和正常运行模式没有差别,请教大神
uboot初始化IIC1,跳转到应用程序中后,先读一字节AT24C04的数据,然后初始化IIC1(未复位),再读一字节AT24C04时,有概率一直检测到IIC处于busy状态。
STM32F407的flash读写问题
keil调试阶段无法进行仿真,能进到仿真界面,但是无法执行程序,这个怎么解决?
STM32F4的IO口5V容忍问题
询问STM32F407两种USB可以实现的功能
TOF传感器(VL53L5),无法得到data ready
在CUBEMX生成的STM32F407VET6的I2S主机接收模式与I2S主机发送模式能正常运行,如何进行动态调整或者如何实现主机全双工?
STM32F407 多机RS485串口通讯+地址位唤醒+DMA空闲线接收,无法进入中断服务程序。
设置RDP等级为2的同时,有什么办法可以确保后续还能够烧录程序
只要偶尔乱一个数据,往往会没完没了地传递下去。
建议你使用DMA Normal模式进行UART数据的接收,将一轮接收的数据个数适当设置大点,比方正常是5个数据,我们
可以将DMA接收size设置为8或10个,比方:
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *)RXData, 10 );
同时将IDLE事件作为接收结束条件,在中断里查询接收的个数,如果数据不是指定个数
则视为异常接收。若刚好是指定个数视为正常接收。每次空闲事件中断后,开启下一轮数据的DMA接收。
即重新调用 HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *)RXData, 10 );
我们只需开启IDLE中断,DMA中断就不要了。CubeMx是默认开启DMA传输中断,可以自行关闭。
使用两个缓冲区,当一个缓冲区正在被处理时,DMA可以继续在另一个缓冲区中接收数据。这样可以避免因处理数据不及时而导致的数据覆盖问题。
LAT1315 串口DMA接收不定长数据的一种方法
多谢多谢。话说是不是无法在cubemx里关闭dma中断啊?我看那个选项是灰色的
STM32CubeMx和库函数代码默认开启DMA的中断功能,在cubeMx配置NVIC的地方,可以关闭的。