STM32开发过程中遇到的一些问题,记录如下。
Q1:下载后程序不运行,反复排查代码没问题。
A1: 栈空间太小,打开startup_stm32f10x_hd.s,把 Stack_Size EQU 0x0200 后面这个数改成0x0800就好了(512 > 2000)。
Q2:DAC+DMA生成正弦波,有时正常,有时不正常。
A2: DAC_InitStructure结构中少初始化了一项DAC_LFSRUnmask_TriangleAmplitude,运行时该参数不确定,所以时有时无,加上DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;工作正常。STM32函数库中有很多结构,一定要把各项都初始化,否则出现不稳定的情况很不容易找问题,很费时间。
Q3:TIM1 PWM不工作
A3:TIM1/8是高级定时器,除普通定时器设置外,还要加一句 TIM_CtrlPWMOutputs(TIM1, ENABLE);
Q4:如何把编码器16位数扩展32位?
A4:在定时器溢出中断中根据计数方向对扩展的高16位进行借位或进位,但要考虑中断函数和主循环的数据同步,参看《STM32实战九 编码器》中 getData() 方法
Q4:能不能用5V电源?
A4:我把5V和3.3V短接,统一用5V,约2个月,工作正常,估计能用。型号:STM32F103VET6
关键字:STM32 开发过程 常见问题
引用地址:
STM32开发过程的常见问题
推荐阅读最新更新时间:2024-11-13 06:32
STM32 IAP(在线更新程序)的使用关键点
所谓IAP其实就相当于一个小小的bootloader 用来更新程序的 很多产品基本都是程序做好后就直接在产线烧录一次就OK了,但是,但是BUG有时候是无可避免的,经常有产品装好后又要重新拆外壳 取下板子重新上烧录架烧的惨痛经历,所以,这种情况下IAP就很有必要了,只要一个对外的接口就能在线更新了,常用的是USB口,当然要是一定要用串口的话也是可以的 硬件上麻烦一些而已,下面就是例程 typedef void (*pFunction)(void); pFunction Jump_To_Application; unsigned long JumpAddress; if(!Check_Whether_Enter
[单片机]
stm32定时器概述
stm32的定时器分3类:基本定时器、通用定时器和高级定时器,其中通用定时器分两组:(TIM2-TIM5)和(TIM9-TIM14)。 基本定时器(TIM6、TIM7) 功能:基本定时和驱动DAC 16位自动重装递增计数器 16位可编程预分频器 频率:84MHz 中断源:计数器上溢更新中断 通用定时器(TIM9到TIM14) 16位自动重装递增计数器 16位可编程预分频器 TIM9和TIM12有两路单通道,其余TIM10、11、13、14都有一路单通道 多定时器互联同步 中断源:更新、输入捕获、输出比较 TIM9和TIM12 时钟源:内部时钟、外部时钟(外部输入引脚TIx)、定时器互同步时钟 常用功能模式:基本
[单片机]
stm32学习笔记(一)点亮LED
#include stm32f10x.h #include delay.h void Delay(u32 count) { u32 i=0; for(;i count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA delay_init(); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-- PA.8 端口配置 GPIO_Ini
[单片机]
STM32开发笔记84: SX1268驱动程序设计(SPI总线)
单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍SPI总线驱动程序。 一、数据手册 1、关键点: 全双工SPI CPOL=0,CPHA=0 从器件 写操作:地址字节+数据字节 读操作:直接发送地址字节,就可返回一个数据字节 NSS在整个帧传输过程保持低电平 MISO在NSS为高时为高阻态 SCK最大时钟16M 2、几个时序图,t10是指从睡眠状态唤醒,NSS下降沿到SCK上升沿的时间,数据手册表明最短时间为100us。 3、芯片离开sleep模式的方法 可以通过NSS的下降沿使得芯片从sleep模式唤醒。下降沿发生后,芯片内部的稳压器都将打开。芯片
[单片机]
使用寄存器点亮LED—STM32的寄存器映射代码讲解
本篇文章中,我们以实例讲解如何通过控制寄存器来点亮LED 灯。 建立一个新工程,见图1,可看到一共有三个文件,分别startup_stm32f10x_hd.s 、stm32f10x.h 以及main.c,下面我们对这三个文件进行讲解。 图 1 工程文件结构 硬件连接 在本教程中STM32 芯片与LED 灯的连接见图2,这是一个RGB 灯,里面由红蓝绿三个小灯构成,使用PWM控制时可以混合成256 不同的颜色。 图2 LED 灯电路连接图 图中从3 个LED 灯的阳极引出连接到3.3V 电源,阴极各经过1 个限流电阻引入至STM32 的3 个GPIO 引脚中,所以我们只要控制这三个引脚输出高低电平,即可控制其所连接
[单片机]
STM32程序的烧录方式
一、启动模式(Boot modes) 阅读:STM32中文参考手册_V10.pdf 查看启动配置(Boot modes)。 在STM32F10xxx里,可以通过BOOT 引脚选择三种不同启动模式。 STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在
[单片机]
stm32功能严重异常的几个常见原因
我们在从事MCU应用开发过程中,难免会碰到MCU芯片异常的问题。比如异常复位,表现为复位脚有电平跳变或者干脆处于复位电平;在做代码调试跟踪时,发现代码往往进不到用户main()程序;或者时不时感觉芯片死掉了,功能完全不可控等。 针对类似严重异常情况的原因我在这里大致总结下,与大家分享。 1、时钟问题。一般表现在时钟配置异常,比方配置超出芯片主频工作范围。【对于STM32系列MCU,如果使用STM32CUBEMX图形化工具做配置,基本可以回避这个问题】 2、电源问题。比方电源质量差,纹波过大,尤其开关电源供电时;或者供电芯片质量差,输出不稳定;或者系统供电能力不足而引起电源波动等。 3、BOOT脚配置问题。对于ARM
[单片机]
stm32的中断与事件
事件:是表示检测有一某件触发事件发生了。 中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。 事件可以触发中断,也可以不触发 中断有可能被更优先的中断屏蔽,事件不会 事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒). 事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号
[单片机]