网站空间与服务器,wordpress文章更新,网站优化公司价格如何计算,wordpress 教学视频本专栏记录STM32开发各个功能的详细过程#xff0c;方便自己后续查看#xff0c;当然也供正在入门STM32单片机的兄弟们参考#xff1b; 本小节的目标是#xff0c;系统主频64 MHZ,采用高速外部晶振#xff0c;通过定时器3 每秒中断控制 PB9 引脚输出高低电平#xff0c;从… 本专栏记录STM32开发各个功能的详细过程方便自己后续查看当然也供正在入门STM32单片机的兄弟们参考 本小节的目标是系统主频64 MHZ,采用高速外部晶振通过定时器3 每秒中断控制 PB9 引脚输出高低电平从而实现 LED 灯的亮灭。 原理通过配置定时器3每1mS进入中断一次每进入中断服务程序一次增加一次计数计数到达500控制PB9引脚输出高或低电平从而实现1S钟周期闪烁。。 涉及到的知识配置UART引脚定时器中断STM32CubeMX的使用 文章目录 1 新建工程2 配置SWD下载引脚3 配置GPIO输出4 配置RCC5 设置系统主频6 定时器配置6.1 错误配置记录6.2 正确配置 7 生成工程8 增加代码实现每1S 控制PB9 引脚输出高或者低电平 1 新建工程
点击File 菜单下的New Project 选择芯片型号如下图所示先输入芯片型号目前这边输入STM32G030C8 双击选择就确定了芯片型号界面会变成如下图所示 2 配置SWD下载引脚
如下图所示在PinoutConfiguration 栏目的System Core 下先点击SYS,再勾选Serial Wire 框 配置好SWD 下载引脚设置 3 配置GPIO输出
按下图 的1,2,3 步骤完成PB9 引脚配置成GPIO 输出设置 配置成功后如下图所示
4 配置RCC
如下图先点击RCC,在HSE 配置中选择Crystal/Ceramic Resonator 外部晶振设 5 设置系统主频
如下图 先点击Clock Configuration 栏目,按下图的1,2,3,4 步骤完成系统64MHZ 主频设置 6 定时器配置
6.1 错误配置记录
如下图的1,2,3,4 步骤完成定时器1ms 计时 (注意这里我踩了一个坑误以为Clock source中的Internal Clock为内部时钟而我是使用的外部晶振所以我一直选择了第二个选项ETR2。其实第二个选项是ETR2 外部触发输入(ETR)(仅适用TIM2,3,4意思外接界的其他信号源正确的应该是外部晶振也是internal clock 相当于使用外部时钟分频来的时钟只要你rcc配置的是外部晶振就没事)所以下面的示例是错误的正确过程请参考6.2
ETR2 外部触发输入(ETR)(仅适用TIM2,3,4意思外接界的其他信号源。
如下图所示完成TIM3 中断使能 6.2 正确配置
如下图的1,2,3,4 步骤完成定时器1ms 计时 因为我们选择的是64MHz的外部时钟64分频1000计数时1ms产生一次中断。 上图中各个参数的计数以及计数器周期计算方法如下 Clock Source(时钟来源) 本文中使用的64MHz外部晶振也要使用Internal Clock 计数器设置 Prtscaler (定时器预分频系数) : 63 Counter Mode(计数模式) Up(向上计数模式) Counter Period(自动重装载值) : 999 CKD(时钟分频因子) No Division 不分频 可以选择二分频和四分频 auto-reload-preload(自动重装载) : Disable 不使能 定时器的定时周期计算方法 T (psc1)(arr1)/Tclk 其中psc 为定时器预分频系数 arr为自动重装载值 Tclk为系统时钟频率 通过计算 T (psc1)(arr1)/Tclk631(9991)/64us1000us1ms 因此实现了1ms中断。
如下图所示完成TIM3 中断使能 7 生成工程
按照下图的步骤进行项目配置项目名称和路径设置等生成项目的类型选择STM32CubeIDE我这里以STM32CubeIDE为例如果你要试用keil5那就选择MDK-RAM如果要使用makefile就选择Makefile注意项目名称和路径不要有中文名
最后全部设置完毕后点击create code生成项目代码 生成的工程如下图所示
8 增加代码实现每1S 控制PB9 引脚输出高或者低电平
如下图如箭头所示实现1ms 中断回调函数中实现计数到500ms 后PB9 翻转输出,
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//1ms中断回调函数
{TimeCounter;if(TimeCounter500)//500ms时间到{TimeCounter0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);//LED反转输出}
}