一、配置引脚(略)
二、程序设计
--------------------------------------------------------------------------------------------------
在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; /* 保存键值 */
else
ucKey_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);
}
}