stm32cubemx 使用LWIP ADC DMA MPU功能
使用LWIP MPU的配置注意项
软件版本:stm32cube 版本:6.5.0,HAL库使用版本:1.10.0
首先需要开启ICache,DCache,开启两个区域,才能使用LWIP功能。0x30040000、0x30044000.如下图。主要开启和关闭数据缓冲功能。具体的TEC、B、C、S设置的每个功能如下图。设置CPU频率在200Mhz以下。480Mhz未测试。
–
采集ADC数据,使用DMA和BDMA功能,stm32cube 生成代码存在BUG,导致ADC启动出错
1,正常设置ADC采集功能,开启DMA传输,如下图
2,手动增加二条指令
__HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP);
增加ADC时钟使能
hadc3.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV2;
增加ADC分频系数
3,启动ADC校准、开始DMA采集
HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3_data_send_buff, 20);
4,上面开启的是ADC3,ADC3使用的是BDMA,不是DMA,它们是有区别的。BDMA访问的内存地址仅在D3域,地址:0x3800 0000,大小64KB。如果直接定义数据开启DMA采集是不行的,还需要强制指定数据内存地址在D3域,BDMA才能正常访问adc3_data_send_buff这个数据。可以使用这样的语句,强制指定数据地址。至此问题都解决了
uint16_t adc3_data_send_buff[20] __attribute__((at(0x38000500)));
–
–