开贴记录STM32工程遇到的各种问题及解决方法

2 篇文章 0 订阅
2 篇文章 0 订阅

开贴记录STM32工程遇到的各种问题及解决方法

STM32工程问题集锦

针对工程开发过程中常见问题进行备注

问题列表

初始化要点

1.将程序编译下载到MCU后无法进行调试。

时钟设置

  1. 串口输出乱码,检查后串口配置正确,将接收端波特率修改为单片机初始化时波特率的一半,接受正常。

串口设置

  1. 串口输出乱码,检查后串口配置正确,将接收端波特率修改为单片机初始化时波特率的一半,接受正常。
  2. 如何在STM32CUBEIDE上在Eclipse上集成串口终端显示。
  3. 串口中文乱码,英文正常。
  4. STM32CUBEMX中串口数据位的选择

STM32CUBEIDE

  1. 如何安装插件。
  2. STM32CUBEMX更新代码后出现中文乱码,及串口中文乱码的解决办法。
  3. 默认初始化程序顺序与工程不符,每次生成后需要手动调整,如何在软件设置里修改初始化程序顺序。
  4. 在使用STM32CUBEIDE看代码的大纲Outline的时候,有的文件显示:Outline is disabled due to scalability mode(option),未能正常显示大纲。

ADC

  1. ADC采用DMA方式多通道不能循环工作只采样一次,需要重新运行HAL_ADC_Start_DMA(&hadc1, &ADC_Value, 3)才能再次采集,并且只有第一个通道有数值,数值还不是正确的转换值。

DMA

  1. 采用DMA方式控制外设输出时,确定外设的配置和相关程序没有问题,但是没有正常输出。

定时器

  1. 定时器中断是怎样一个处理过程,应该把中断后要处理的程序放在哪个地方?

串口通信

  1. 直接采用单片机的串口TTL电平通信正常,增加MAX485芯片后,通信不稳定,误码率高。

HardFault

  1. 调试时,程序时不时进入void HardFault_Handler(void),有时存在偶然性,有时一直进入?

处理方法

初始化要点

1.将程序编译下载到MCU后无法进行调试。
由于问题是在使用STM32CUBE配置时发现,解决办法如下:检查System Core->SYS设置,是否启用Serial Wire模式,如果没有需要启用。如果此时开发软件(STM32CUBEIDE)无法和MCU通信,可以使用STM32CubeProgrammer连接芯片,将FLASH清空,清空后开发软件就能连接上MCU。

时钟设置

  1. 串口输出乱码,检查后串口配置正确,将接收端波特率修改为单片机初始化时波特率的一半,接受正常。
    检查时钟设置,HSE的时钟值是否与板上相符,经检查发现板上为8MHz,设置为16MHz,导致出现串口乱码问题。

串口设置

  1. 串口输出乱码,检查后串口配置正确,将接收端波特率修改为单片机初始化时波特率的一半,接受正常。
    检查时钟设置,HSE的时钟值是否与板上相符,经检查发现板上为8MHz,设置为16MHz,导致出现串口乱码问题。
  2. 如何在STM32CUBEIDE上在Eclipse上集成串口终端显示。
    安装“Terminals”插件(eclipse自带 Kepler ):
    安装地址:
    http://download.eclipse.org/releases/kepler
    ->Mobile and Device Development->Target Management Terminal

    安装 "TXRX"插件:
    安装地址(选择最新版本):
    http://rxtx.qbang.org/eclipse/
    安装完成后重启Eclipse,重启后选择Window -> Show View -> Other … -> Terminal -> Terminal 进行简单的配置,即可打开串口调试终端。

    (安照教程设置后未成功:参考教程链接
  3. 串口中文乱码,英文正常。
    点击编辑->设置编码->其他:gbk(手动键入)
  4. STM32CUBEMX中串口数据位的选择
    8位数据+带奇偶校验,数据长度选择9位(带奇偶校验)
    8位数据+无奇偶校验,数据长度选择8位(带奇偶校验)
    7位数据+带奇偶校验,数据长度选择8位(带奇偶校验)
    如果没有这么设置,会出现=某些数据能满足要求,某些数据异常

STM32CUBEIDE

  1. 如何安装插件。
    打开STM32CUBEIDE->帮助->安装新软件->输入或者选择一个站点->选择要安装的插件,根据安装提示进行操作,重启后检查插件是否正常工作。
  2. STM32CUBEMX更新代码后出现中文乱码,及串口中文乱码的解决办法。
    点击编辑->设置编码->其他:gbk(手动键入)
  3. 修改初始化程序顺序
    打开软件:STM32CUBEMX->Project Manager->Advanced Setting->Generated Function Calls。如下图所示: 在这里插入图片描述 4. 在使用STM32CUBEIDE看代码的大纲Outline的时候,有的文件显示:Outline is disabled due to scalability mode(option),未能正常显示大纲。
    由于Eclipse在文件大于5000行时会自动进入scalability模式,需要去除scalability模式的限制就可以看Outline。点击大纲窗口显示的Outline is disabled due to scalability mode(option)的option,进入窗口首选项(或者在软件的窗口菜单找到该项)->C/C+±>Editor->Scalability->Scalability mode settings,取消勾选第一项:Disable editor live parsing
    修改窗口首选项

ADC

  1. ADC采用DMA方式多通道不能循环工作只采样一次,需要重新运行HAL_ADC_Start_DMA(&hadc1, &ADC_Value, 3)才能再次采集,并且只有第一个通道有数值,数值还不是正确的转换值。
    STM32CUBEMX生成程序代码后,手动调换了DMA和ADC1的初始化顺序,先初始化DMA,再初始化ADC,程序正常运行。程序顺序如下:
    /* Initialize all configured peripherals */
    MX_DMA_Init();
    MX_ADC1_Init();
    为方便后续更新STM32CUBEMX设置,可在STM32CUBEMX软件中修改初始化程序顺序,具体做法如下:STM32CUBEMX->Project Manager->Advanced Setting->Generated Function Calls。如下图所示: 初始化程序顺序修改菜单

DMA

  1. 采用DMA方式控制外设输出时,确定外设的配置和相关程序没有问题,但是没有正常输出。
    此时着重检查DMA的设置:存储器到存储器模式(存储器到存储器模式不能与循环模式同时使用)、配置DMA通道循环模式、优先级、数据宽度、是否增量、传输方向(!!!重点检查:输出/输入的设备传输方向不一样!!!)、是否增量参数、可编程的数据传输宽度、对齐方式和数据大小端、可编程的数据量。
    在这里插入图片描述

定时器

  1. 定时器中断是怎样一个处理过程,应该把中断后要处理的程序放在哪个地方?
    中断触发后,先进入定时器中断函数void TIM2_IRQHandler(void) 执行定时器中断处理函数 HAL_TIM_IRQHandler(&htim2)判断产生的是哪一类定时器中断(溢出中断/PWM中断…) 和定时器通道,然后执行相对应中断回调函数void HAL_TIM_PeriodElapsedCallback(&htim2);用户要进行处理的中断任务可以添加在中断回调函数里面,直接在main.c文件中定义对应中断回调函数即可(HAL库已对中断回调函数进行弱定义)。

串口通信

  1. 直接采用单片机的串口TTL电平通信正常,增加MAX485芯片后,通信不稳定,误码率高。
    首先确保MAX485电路正常,降低波特率,查看通信质量,此前测试115200的波特率用在MAX485误码率极高,更换为9600,工作正常,最高可以用到多少还待测试。

HardFault

  1. 调试时,程序时不时进入void HardFault_Handler(void),有时存在偶然性,有时一直进入?
    检测程序中是否存在做出发语句,特别是除数为外部输入数值,如果除数为0时,会进入void HardFault_Handler(void)程序,此时需要在做除法前先对除数进行判断是否大于0。时不时进入该程序,经常出现在输入为ADC采样值时,会因外部输入电压变化,发生偶然性事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值