蓝桥杯STM32G431学习之TIM程序设计(四)
一、配置引脚(略)
二、程序设计
--------------------------------------------------------------------------------------------------
在tim.h这个头文件中声明4个函数
--------------------------------------------------------------------------------------------------
/* USER CODE BEGIN Prototypes */
void TIM1_SetAutoReload(uint16_t usAuto);
void TIM1_SetCompare1(uint16_t usComp);
void TIM3_SetCompare1(uint16_t usComp);
void TIM_GetCapture(uint16_t *pusBuf);
/* USER CODE END Prototypes */
--------------------------------------------------------------------------------------------------
在tim.c完成上述4个函数的实现
--------------------------------------------------------------------------------------------------
/* USER CODE BEGIN TIM1_Init 2 */HAL_TIM_PWM_Start(&htim1,2);/* USER CODE END TIM1_Init 2 *//* USER CODE BEGIN TIM2_Init 2 */HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);/* USER CODE END TIM2_Init 2 *//* USER CODE BEGIN TIM3_Init 2 */HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);/* USER CODE END TIM3_Init 2 */
/* USER CODE BEGIN 1 */
void TIM1_SetAutoReload(uint16_t usAuto)
{TIM1->ARR=usAuto;
}
void TIM1_SetCompare1(uint16_t usComp)
{TIM1->CCR1=usComp;
}
void TIM3_SetCompare1(uint16_t usComp)
{TIM3->CCMR1=usComp;
}
void TIM_GetCapture(uint16_t *pusBuf)
{pusBuf[0]=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1)+1;pusBuf[1]=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2)+1;
}
/* USER CODE END 1 */
--------------------------------------------------------------------------------------------------
1.定义变量
2.在main.c中加stdio.h、lcd.h三个头文件
3.声明函数LCD_Proc()和KEY_Proc()
4.在while(1)中加入函数LCD_Proc()和KEY_Proc()
5.实现函数LCD_Proc()和KEY_Proc()
--------------------------------------------------------------------------------------------------
/* USER CODE BEGIN PV */
uint8_t ucKey; /* 按键值 */
uint16_t usComp=1000; /* TIM输出比较值 */
uint16_t usCapt[2]; /* TIM输入捕捉值 */
uint8_t ucLcd[21]; /* LCD值 */
uint8_t ucState; /* 界面状态 */
/* USER CODE END PV */
/* USER CODE BEGIN Includes */
#include "lcd.h"
#include "stdio.h"
/* USER CODE END Includes */
/* USER CODE BEGIN PFP */
void LCD_Proc(void);
void KEY_Proc(void); /* 按键处理 */
/* USER CODE END PFP */
/* USER CODE BEGIN 2 */LCD_Init(); LCD_Clear(Black); LCD_SetTextColor(White); LCD_SetBackColor(Black); /* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */LED_Proc();LCD_Proc();KEY_Proc(); }/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
void LCD_Proc(void)
{if(ucState == 0) /* 数据界面 */{sprintf((char*)ucLcd, " Page One ");LCD_DisplayStringLine(Line2, ucLcd); TIM_GetCapture(usCapt);sprintf((char*)ucLcd, " FRE:%05u B2:%04u ",1000000/usCapt[0],usComp);LCD_DisplayStringLine(Line4, ucLcd);sprintf((char*)ucLcd, " PER:%05u WID:%04u ",usCapt[0],usCapt[1]);LCD_DisplayStringLine(Line6, ucLcd); }else{sprintf((char*)ucLcd, " Page Two ");LCD_DisplayStringLine(Line2, ucLcd); sprintf((char*)ucLcd, " Ni hao");LCD_DisplayStringLine(Line4, ucLcd); sprintf((char*)ucLcd, " ZiDongHua");LCD_DisplayStringLine(Line6, ucLcd);}
}
void KEY_Proc(void)
{uint8_t ucKey_Val = 0;ucKey_Val = KEY_Read(); /* 按键读取 */if(ucKey_Val != ucKey) /* 键值变化 */ucKey = ucKey_Val; /* 保存键值 */elseucKey_Val = 0; /* 清除键值 */switch(ucKey_Val){case 1: /* B1按下 */ucState ^= 1; /* 切换界面状态 */ LCD_Clear(Black); /* LCD清屏 */break;case 2: /* B2按下 */usComp += 1000;if(usComp ==10000)usComp = 1000;TIM1_SetCompare1(usComp>>1);TIM3_SetCompare1(usComp);}
}
蓝桥杯STM32G431学习之TIM程序设计(四)相关推荐
- 蓝桥杯STM32G431学习记录9——基本定时器CubeMX配置及使用
定时器模块 定时器总体概述 定时器计数方式 复用引脚分配图(可通过此图查阅各个IO口的复用功能并进行配置) 基本定时器 基本定时器TIM6/7内部结构图 基本定时器CubeMX配置 basic_tim ...
- 蓝桥杯STM32G431学习记录4——LCD的使用
LCD的配置 根据比赛提供的赛场资源数据包(G431)中的LCD_Test例程打开CubeMX生成的代码可直接使用 main.c中对LCD使用的程序编写 #include "main.h&q ...
- 【蓝桥杯-单片机学习笔记(十四)】DS1302
一.DS1302介绍 1.功能介绍 DS1302包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信仅通过一条串行输入输出口,实时时钟/日历提供包括秒.分.时.日期.月份和年份信息.闰年可 ...
- 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示
一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...
- 蓝桥杯STM32G431RBT6学习——定时器中断
蓝桥杯STM32G431RBT6学习--定时器中断 前言 从网络上的资料来看,蓝桥杯嵌入式好像并不考外部中断(毕竟通常只是个按键应用),因此跳过进行定时器的学习. STM32单片机的定时器通常分为高级 ...
- 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按
此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下: 使用矩阵键盘时,要将跳线帽J5跳至KBD模式. 值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用.如果单 ...
- 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F
一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...
- 蓝桥杯单片机学习13——NE555方波发生器频率测量
NE555 简介 引脚图 原理图 真值表 工作原理 频率测量原理 定时器测量频率方法 代码实现 总结(一堆废话) 简介 NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做55 ...
- 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片
上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...
最新文章
- 设置一个双色球脚本(2)并带颜色输出
- c语言编程 验证用户名和密码是否正确(函数定义),《C语言程序设计教程》习题参考答案[精品资料].doc...
- 基于哈希表的索引堆变形(Hackerrank: QHEAP1)
- python保存模块_Python使用Pickle模块进行数据保存和读取的讲解
- inuri .php id=,php常用函数(遇见就补充)
- 坯子库曲面推拉教程_一招曲面流动,搞定99%异形建模
- MySQL高可用架构对比
- 来自java文档 InputStream类
- 《Cisco IOS XR技术精要》一2.7 高可用架
- php里面求坐标的间距,php如何计算两坐标点之间的距离
- 偷懒才能编程序——计算机达人成长之路(18)
- Anaconda3安装以及常用命令
- AVI视频怎么转换成MOV视频
- STM32F205 HAL库 RTC软件复位后不准
- [原创]开心农场助手V1.21 发布
- Raptor码(一):2007RFC5053标准编解码学习
- UVA 1212 - Duopoly(最小割)
- [折腾日记]win10 ,ubuntu双系统安装避坑指南
- 2074:【21CSPJ普及组】分糖果(candy)
- Mysql修改表中字段名称、字段类型
热门文章
- 软件测试工程师在职研究生,在职研究生工科
- 分布式系统中的“无状态”和“有状态”详解
- 七牛云 QVM 「1 元上云」领取攻略 企业如何低成本上云必读
- 【POJ 3321】Apple Tree(树的dfs序+树状数组)
- 高清时代4K H.265/HEVC来临---OTT/IPTV直播系统大发展
- H3C堆叠实验配置(精品系列避坑篇)
- 明星热图|宋轶、辛芷蕾、王丽坤等演绎服饰新品;肖战代言李宁;林俊杰献唱迪士尼经典歌曲...
- DM365 IPNC软件架构详解
- PF526系列高性能的二维码解码芯片
- 【题解】POJ 1852 Ants(搜索)