STM32H743VIH6 usart dma闲时中断无法获取数据。之前一直认为我代码写错了,但 是后来。我用STM32CUBE 又做了一工程,只是串口空闲中断,两块板不同,一块是STM32H743VIH6,一块 是STM32H743VIT6。代码一样,前者是用串口8,后者是用串口2,晶振频率不同,但是串口的时钟频率我都调到都是120MHZ。其它的设置也一样,结果前者依然读不到数据,后者就可以。 我还一度找了STM32H743的官司勘误手册对照了发现DMA_SxCR_TRBUFF要使能,我看了STM32Cube FW_H7 V1.9.0中的stm32h7xx_hal_dma.c,已经在HAL_DMA_Init函数中使能了。 registerValue |= DMA_SxCR_TRBUFF; 同时我可以确定的是我的STM32H743VIH6与STM32H743VIT6都是V版的。芯片上有印。 我一度怀疑STM32H743VIH6的芯片是不是坏了,但是我用他做SPI 与I2C读诹传感器数据时是正常的。这到底是怎么回事 |
在两块板上比较测试下,STM32H743VIH6和TM32H743VIT6除了封装有差异而已,其它芯片特性及功能一样的。如果一块OK,一块异常,重点
比较下硬件线路及电源方面,重点核对下管脚。
我用的是http://www.mateksys.com/?portfolio=h743-slim#tab-id-3 这块板。接的串口8 。板上用黄色圈起来的地方,我用的是vsw=5V,用的是DMA+USART串口闲时中断接收数据,我试过去掉DMA,使用串口中断,能接收到数据,但是都是错误的。
而且我用这块板上的SPI ,I2C与传感器进行通讯,都没有问题,芯片应该是没问题的。
ok,明白你的意思了。问题应该出在CACHE的使用上。你将D-CACHE关闭后测试下。你可能需要做下mpu配置,将DMA访问的相关区域配置为透写属性。
我没有开CACHE。接收变量也是在0X240000范围内,DMA可以直接访问的。
既然这样,你还要注意另一个问题,就是UART接收是否发生了溢出,它会导致DMA接收无法继续下去。
没有看到溢出错误,接收的数据一次25字节,1秒70HZ多,缓冲50字节,不会存在溢出。
我怀疑这个晶振频率不是27MHZ,我配置成27MHZ,造成的上面一系列问题