2021-08-12

这篇博客记录了在STM32开发过程中遇到的几个典型问题:LCD初始化与串口冲突、按键中断失效、PB3引脚冲突、TIM3 PWM配置以及固件库添加。解决问题的关键包括调整初始化顺序、引脚重映射和正确配置定时器参数。对于新手开发者来说,这些经验有助于避免踩坑。
摘要由CSDN通过智能技术生成

STM32学习踩坑实录
<1>LCD初始化中调用了printf’函数,如果不对串口进行初始化将会导致程序卡死。
<2>在LCD初始化之后,按键外部中断失效,但是LCD不进行初始化时中断可以正常工作。
解决方法:将LCD的初始化放在外部中断初始化的后面解决。
一般情况下将LCD,PWM等的初始化放在最后可以避免外部中断失效,同样的情况也会出现在PWM初始化和外部中断初始化的顺序上。
<3>设备STM32C8T6,在使用按键引脚PB3时无法正常使用。最终发现PB3引脚是作为JTAG下载接口使用,即使是初始化为输入模式也依然默认作为下载接口。
解决方法:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB
							|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);

将PB3重映射并且失能JTAG功能即可。
<4>TIM3的ARR寄存器和PSC寄存器,确定PWM频率。
CCRx : 决定PWM占空比(高低电平所占整个周期比例),占空比的最大值为ARR寄存器的值。
IC以为输入捕获,OC以为输出比较。

1,使能定时器3和相关IO时钟(LED-PB5)
    使能定时器3时钟:RCC_APB1PeriphClockCmd();
    使能GPIOB时钟:RCC_APB2PeriphClockCmd();
 
2,初始化IO口为复用功能输出 GPIO_Init();
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 
3,PB5输出PWM(定时器3通道2),需要部分冲突映射
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启AFIO时钟设置
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//部分重映射
 
4,初始化定时器 (重装载值ARR,与分频系数PSC)
    TIM_TimeBaseInit();//决定PWM周期
 
5,初始化输出比较参数:
    TIM_OC2Init();//通道2输出比较初始化
 
6,使能预装载寄存器
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);//定时器3 通道2
 
7,使能定时器
    TIM_Cmd();
 
8,不断改变比较值CCRx,达到不同的占空比效果
    TIM_SetCompare2(); //通道2,改变比较值CCRx

<5>
在这里插入图片描述
在这里插入图片描述

在keil软件中Flash->Configure Falsh Tools>Utilities>Setting>Flash download setup>Add Flash Programming Algorlthm"窗口中找不到STM32F10X 128kB Flash"
A:在keil安装目录…:\ProgramFiles\keil5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Flash中复制文件STM32F10x_128.FLM到路径F:\Program Files\keil5\ARM\Flash中即可正常添加

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值