• 【STM32】STM32F429 HAL库开发注意事项


    正点原子F429开发板,HAL库

    注意

            1、如果将全部库文件都引入,会出现error: l6200e: symbol hal_mspdeinit multiply defined,此处是stm32f1xx_hal_msp_template.c和stm32f1xx_hal_msp.c重复定义了HAL_MspDeInit和HAL_MspInit 函数,此时要么不引入,要么把其中一个的注释掉

            2、编译后报warning,stm32f4xx_ll_usb.c(785): warning:  #3108-d,点Option for target  /  C/C++ ,将C99 Mode和GNU extensions取消勾选即可解决

            3、用CubeMX生成模板,首先注意CubeMX版本和固件版本,如果CubeMX版本比固件版本新太多可能会编译报错,所以建议直接最新。。。生成以后编译通过了,Download到板子上,却发现程序并没有运行,查了半天错,翻腾版本,排除各方原因后才发现终端没有弹出application running ...,CubeMX生成的Keil模板似乎没有默认将Target Option-Debug-Settings-Flash Download的Download Function(即Download键的功能)中Reset and Run勾上。。。所以其实要么勾上这个,要么重启板子,就可以看到运行结果

            4、按键下降沿触发外部中断,记得设置GPIO上拉。。。

            5、当需要引用.lib文件时,注意勾选Option/Target/Use MicroLIB,否则将找不到.lib文件

            6、针对正点原子的sys.c,在将代码移植到非keil的ide,如IAR或者基于arm-gcc-none-eabi交叉编译器的环境时,第九十行开始会报错

    //THUMB指令不支持汇编内联
    //采用如下方法实现执行汇编指令WFI  
    __asm void WFI_SET(void)
    {
        WFI;          
    }
    //关闭所有中断(但是不包括fault和NMI中断)
    __asm void INTX_DISABLE(void)
    {
        CPSID   I
        BX      LR      
    }
    //开启所有中断
    __asm void INTX_ENABLE(void)
    {
        CPSIE   I
        BX      LR  
    }
    //设置栈顶地址
    //addr:栈顶地址
    __asm void MSR_MSP(u32 addr) 
    {
        MSR MSP, r0             //set Main Stack value
        BX r14
    }

                   这是针对于keil不支持汇编内联做出的修改,但这么写在其他地方会报错,改为如下代码即可

    //THUMB指令不支持汇编内联
    //采用如下方法实现执行汇编指令WFI  
    void WFI_SET(void)
    {
        asm("WFI");          
    }
    //关闭所有中断(但是不包括fault和NMI中断)
    void INTX_DISABLE(void)
    {
        asm("CPSID   I");
        asm("BX      LR");      
    }
    //开启所有中断
    void INTX_ENABLE(void)
    {
        asm("CPSIE   I");
        asm("BX      LR");  
    }
    //设置栈顶地址
    //addr:栈顶地址
    void MSR_MSP(u32 addr) 
    {
        asm("MSR MSP, r0");             //set Main Stack value
        asm("BX r14");
    }

            7、使用CubeMX生成TIM的PWM Channel时注意,先指定IO,再配置通道,且生成后MspInit里GPIO特性需要按需修改 

            8、切记切记,使用DMA方式的ADC时,注意要先调用DMA的Init,后调用ADC的Init!!!否则程序将卡死

            9、标准库移植到HAL库时,有很多需要注意的地方,例如GPIO的配置,标准库Init中并没有Pull这一成员,而是将Pull归入Mode,故移植到HAL要注意加上Pull的配置

            

  • 相关阅读:
    日常开发常用工具(持续更新中,欢迎小伙伴评论中分享自己认为好用的工具)
    使用 POJO 对象绑定请求参数
    Tomcat+Eclipse乱码问题解决方法
    微信客服接口发消息 -- 微信客服系列文章(一)
    @RequestParam--SpringMVC 注解系列文章(一)
    微信JS图片上传与下载功能--微信JS系列文章(三)
    微信JS分享功能--微信JS系列文章(二)
    微信JS初始化--微信JS系列文章(一)
    二十进制数的加法
    使用NuGet管理项目类库引用
  • 原文地址:https://www.cnblogs.com/ZYQS/p/14783426.html
Copyright © 2020-2023  润新知