在线时间7 小时
UID3061349
ST金币42
蝴蝶豆0
注册时间2016-3-15
该用户从未签到
初级会员
- 最后登录
- 2020-1-24
|
当开启了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); }}
图1:开启Dcache,ADC的DMA循环传输一个端口的ADC值,只要一读立马附近都GG。
图2:开启Dcache,不读ADC的值(注释掉i = ADC_buff[160]),一切正常。
各位大神,求教,就究竟怎么了,而且,官方的例程,也开启了Dcache,读值,没问题可以!!!反复看了N遍,除了用的端口不一样,其他配置一模一样,Cube配置的。有这么日狗的事情吗?真想咋了这板子的心都有了,原谅我菜
|
|