STM32 CubeMX开发 F1通用定时器

我手上有一块精英板,型号是STM32F103ZET6,就以此为例介绍一下32单片机的定时器怎么在CubeMX下配置,并用一个呼吸灯展示一下定时器的效果

1 新建工程

请添加图片描述
配置工程信息
请添加图片描述
请添加图片描述

2 配置时钟

从原理图中找到开发板上的外部晶振为8M
请添加图片描述
设置RCC的高速时钟源为外部晶振
请添加图片描述
设置时钟图
请添加图片描述
芯片手册中也可以看到APB1的上限频率,和时钟图中是对应的
请添加图片描述
在手册中还可以找到哪些定时器挂在APB1下哪些定时器挂在APB2下
挂在APB1下的外设
请添加图片描述
挂在APB2下的外设
请添加图片描述

3 配置Timer

这里我选TIM1举例配置一个中断频率为1KHz的定时器,并在定时器的中断内完成呼吸灯任务
请添加图片描述
根据前面讲到的,我们知道TIM1挂在APB2下,则Tclk=72M,计算ARR和PSC即可
请添加图片描述
使能中断
请添加图片描述

4 配置LED灯引脚

查看原理图
请添加图片描述
LED0
请添加图片描述
LED1
请添加图片描述
CubeMX中配置引脚
PB5配置为Outuput
请添加图片描述
同理PE5配置为Output
请添加图片描述
GPIO设置请添加图片描述
LED1同理,修改Label后右边的可视化IO也可以看到名称发生变化
请添加图片描述
配置Debug(如果需要debug的情况下)
请添加图片描述

5 生成工程编写呼吸灯

点击生成并打开
请添加图片描述
按照上期讲解,加入我们自己的代码文件,并在小锤子的CC++选项卡中加入我们代码的头文件路径
请添加图片描述
打开我们的代码文件引入头们的头文件并打开
请添加图片描述
引入32的底层库文件

#ifndef _BREATH_H_
#define _BREATH_H_
#include "stm32f1xx.h"





#endif

回到breath.c中

#include "breath.h"
#include "main.h" // main.h里有Cube为我们生成的IO口宏定义
#include "gpio.h"// 用到GPIO库函数

uint32_t clock_count = 0;
uint16_t light_count = 0;//变频变量
uint8_t k = 0;//增减标识k=0增k=1减
uint8_t T_pwm = 10;//PWM周期
uint8_t T_bp = 50;//变频周期
//总周期=T_pwm*T_bp*2 ms 此例程为10*50*2=1000ms
void Breath_light(void){
    
    
	
	if(clock_count%T_bp == 0)//变频周期50ms
	{
    
    
		if(light_count<T_pwm && k==0)
			light_count++;
		else if(light_count == T_pwm){
    
    
			k = 1;light_count--;}
		else if(light_count == 0)
			k = 0;
		else if(light_count<T_pwm && k==1)
			light_count--;
	}

	//pwm
	if(clock_count%T_pwm<light_count){
    
    
		HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,1);
		HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,0);
	}
	else if(clock_count%T_pwm>=light_count){
    
    
		HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,0);
		HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,1);
	}
	//计数器更新
	clock_count++;
}

在breath.h中把我们编写的函数声明为外部函数

#ifndef _BREATH_H_
#define _BREATH_H_
#include "stm32f1xx.h"

void Breath_light(void);



#endif

6 中断处理

在main.c中启动定时器中断
请添加图片描述
在中断处理文件中调用breach函数
请添加图片描述
打开这个文件,并在指定位置引入我们的头文件
请添加图片描述
往下翻,可以找到定时器中断服务函数,在这里调用breath
请添加图片描述

7 编译下载与演示

这里说一个HAL库的缺点,在选择这个选项的时候编译会比较慢
请添加图片描述
这个信息可以帮助你goto definition,但是当你习惯使用全局搜索的时候就会觉得这个功能在编译能更快的条件下也就没那么必要了
接下来编译、无报错后下载、按下reset,点灯工程师诞生了!
请添加图片描述

关于CubeMX的更多详细使用方法后续更新


X 往期文章

STM32 CubeMX开发及f103开发环境搭建

鸿蒙(HMOS)开发基础篇(二)开发初体验-多设备协同

鸿蒙(HMOS)开发基础篇(一)环境搭建 & Helloworld

今天,我是数据库的BOS(读者-写者问题)

哲学家不会吃饭了,我们快来帮帮他们(C语言、进程通信)

Python+OpenCV+imutils的简单图片处理(放缩、翻转、旋转、灰度RGB提取)

python手写K-means实现二维聚类.


如果文中有误,还请在评论区指正。这里是海小皮,我们一同进步!!!

猜你喜欢

转载自blog.csdn.net/weixin_42464904/article/details/121580482