定义了一个buffer
uint32_t dcmi_data_buff[16000]={0};
调用了HAL库函数
dcmi_dma_status = HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, dcmi_data_buff, DCMI_CN*DCMI_RN/4);
出现这种报错
../Core/Src/main.c(174): error: #167: argument of type "uint32_t *" is incompatible with parameter of type "uint32_t"
dcmi_dma_status = HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, dcmi_data_buff, DCMI_CN*DCMI_RN/4);
查看库函数原型是这样的
HAL_StatusTypeDef HAL_DCMI_Start_DMA(DCMI_HandleTypeDef* hdcmi, uint32_t DCMI_Mode, uint32_t pData, uint32_t Length);
pData居然不是一个指针类型导致报错,填写buff还有不是指针类型的?
将函数原型在源文件和头文件都更改为
HAL_StatusTypeDef HAL_DCMI_Start_DMA(DCMI_HandleTypeDef* hdcmi, uint32_t DCMI_Mode, uint32_t* pData, uint32_t Length);
再编译又出现新的错误
查看pBuffPtr定义
注释说是指向buffer的指针,但是很明显和下面的指针不一样少了*,我们帮他加上再编译,又出现了新的错误,而错误还是因为人家需要的是uint32_t类型的数据不是uint32_t *类型的,这下不认为库有问题了,因为内存地址确实是32位的数,推翻上述修改,回归传参方式的修改,改为
dcmi_dma_status = HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)dcmi_data_buff, DCMI_CN*DCMI_RN/4);
将指针强转为uint32_t类型再传,之所以说是将指针类型强转是因为数组名就是这个数组首地址,是一个指针。
改完后编译上诉错误消失,库版本STM32Cube FW_F4 V1.28.0
使用的工具是keil5,记录一下。