IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 CubeMX开发 F1通用定时器 -> 正文阅读

[嵌入式]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实现二维聚类.


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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:27:35  更:2021-11-28 11:28:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:00:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码