记录STM32F407ZGT6使用HAL库时遇到的坑

文章讲述了在使用STM32CubeFW_F4V1.28.0库时,遇到关于DCMIDMA函数类型不匹配的错误。通过调整函数参数,将非指针类型的buffer转换为指针类型并强转为uint32_t,最终解决了编译问题。
摘要由CSDN通过智能技术生成

定义了一个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,记录一下。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值