当开启了Dcache后,使用DMA循环模式传输ADC的值,结果出现了只要一读数组中的值,如ADC_buff[200],只要做i = ADC_buff[160];立马ADC_buff[160]到ADC_buff[175]都会是0,就像ADC的值不再往里面传了一样,关闭Dcache或者不读值,接收正常,这不是日了狗了吗?Dcache这么难用,而且用Cube开启MPU,立马Hardfault,唉。程序如下: ALIGN_32BYTES (static uint16_t aADCxConvertedData[192]);int main(void){ SCB_EnableICache(); SCB_EnableDCache(); HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DMA_Init(); MX_USART3_UART_Init(); MX_ADC1_Init(); MX_TIM2_Init(); if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK) { Error_Handler(); } HAL_Delay(500); HAL_ADC_Start_DMA(&hadc1,(uint32_t *)aADCxConvertedData,192); HAL_TIM_Base_Start(&htim2); while (1) { i = aADCxConvertedData[160]; i++; HAL_Delay(500); }} 各位大神,求教,就究竟怎么了,而且,官方的例程,也开启了Dcache,读值,没问题可以!!!反复看了N遍,除了用的端口不一样,其他配置一模一样,Cube配置的。有这么日狗的事情吗?真想咋了这板子的心都有了,原谅我菜 |
STM32H7432 串口采用DMA方式接收不定长数据重复问题
STM32H750使用FMC控制LCD数据异常
STM32H7 CANFD过滤问题
关于STM32H750采用DMA方式发送数据到DAC产生正弦波
STM32H7配置成USB DEVICE时,连接电脑时不进入中断
STM32H753XIH6运行时发热达到五六十度
STM32H750电池供电后AD采样的电容板子电压变化异常
STM32H750VB芯片整片无法擦出
STM32H743IIT6Flash擦除问题
STM32H750 ADC 发现结果跳动很严重
你要用dcache首先就要保证dcache和ram里的数据都一样的
你用dma接受数据 这个操作是不通过cpu的
简单的说就是dma改变了ram里的数据 但是cpu不知道 还以为ram数据是他缓存在dcache里的 cpu操作的还是dcache里的数据 能不出错么?
你cpu在读dma传输的数据的时候 加上dcahce刷新指令 自己去查CMSISI接口里的函数 ARM都提供给你了
评分
查看全部评分
请问您用过的刷新指令是什么?
或者在哪里可以查到CMSIS指令的解释呢?
ARM Cortex-M7 Devices
Generic User Guide
直接使用库函数提供的对应函数关闭,如果是CubeMX配置的,直接在CUBEMX中关闭