int main(void) { HAL_Init(); SystemClock_Config(); //Configure the system clock /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_USART1_UART_Init(); MX_TIM3_Init(); MX_TIM8_Init(); MX_TIM2_Init(); MX_TIM16_Init(); MX_TIM17_Init(); LCD_Init(); LED_Close(); I2CInit(); EEPROM=x24c02_read(0X61);HAL_Delay(5); x24c02_write(0X61,++EEPROM);HAL_Delay(5); /*UART1 9600 Start*/ __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); __HAL_UART_CLEAR_IDLEFLAG(&huart1); HAL_UART_Receive_DMA(&huart1, (uint8_t *)RX, 50); HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2); __HAL_TIM_CLEAR_IT(&htim2,TIM_CHANNEL_2); //PA1:TIM2_CH2,PA2:TIM2_CH3 TIM2_Freq_Set(1000000/PA1_Freq-1); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,10000*PA1_Duty/PA1_Freq); //While loop while (1) { Task_Execution(); if(PA1_Ref==1) { PA1_Ref=0; //重新执行频率和占空比的设置 TIM2_Freq_Set(1000000/PA1_Freq-1); // __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,10000*PA1_Duty/PA1_Freq); } //LCD显示 if(LCD_Ref==1) { LCD_Ref = 1 ; Task_Display(); } //按键判断 if(KEY_Flag==1) { KEY_Flag=0; Task_Key(); } //防止长时间按一个按键 if(Key_LongPress==1) { Key_LongPress=0; Task_Key_LongPress(); } //防止很快的点击一个按键很多次 //也就是防抖动! if(Key_FastPress==1) { Key_FastPress=0; Task_Key_LongPress(); } } }请为每行代码添加注释
时间: 2023-09-04 07:07:31 浏览: 175
rtl8723a_hal_init.rar_单片机开发_Unix_Linux_
// 主函数入口
int main(void)
{
HAL_Init(); // 初始化 HAL 库
SystemClock_Config(); // 配置系统时钟
/* 初始化所有配置的外设 */
MX_GPIO_Init(); // 初始化 GPIO
MX_DMA_Init(); // 初始化 DMA
MX_USART1_UART_Init(); // 初始化 USART1
MX_TIM3_Init(); // 初始化 TIM3
MX_TIM8_Init(); // 初始化 TIM8
MX_TIM2_Init(); // 初始化 TIM2
MX_TIM16_Init(); // 初始化 TIM16
MX_TIM17_Init(); // 初始化 TIM17
LCD_Init(); // 初始化 LCD
LED_Close(); // 关闭 LED
I2CInit(); // 初始化 I2C
EEPROM = x24c02_read(0X61); // 从EEPROM读取数据到EEPROM变量,并延时5毫秒
HAL_Delay(5);
x24c02_write(0X61, ++EEPROM); // 将 EEPROM 变量加一后写入 EEPROM,并延时5毫秒
HAL_Delay(5);
/* UART1 9600 Start */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); // 使能 UART1 的空闲中断
__HAL_UART_CLEAR_IDLEFLAG(&huart1); // 清除 UART1 的空闲标志位
HAL_UART_Receive_DMA(&huart1, (uint8_t *)RX, 50); // 启动 UART1 的 DMA 接收
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); // 启动 TIM2 的 PWM 输出通道2
__HAL_TIM_CLEAR_IT(&htim2, TIM_CHANNEL_2); // 清除 TIM2 的中断标志位
// 设置 PA1:TIM2_CH2,PA2:TIM2_CH3 的频率和占空比
TIM2_Freq_Set(1000000/PA1_Freq-1); // 设置 TIM2 的频率
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 10000*PA1_Duty/PA1_Freq); // 设置 TIM2 的占空比
// 进入主循环
while (1)
{
Task_Execution(); // 执行任务
if (PA1_Ref == 1)
{
PA1_Ref = 0; // 重新执行 PA1 的频率和占空比设置
TIM2_Freq_Set(1000000/PA1_Freq-1); // 设置 TIM2 的频率
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 10000*PA1_Duty/PA1_Freq); // 设置 TIM2 的占空比
}
if (LCD_Ref == 1)
{
LCD_Ref = 1 ; // 执行 LCD 显示任务
Task_Display();
}
if (KEY_Flag == 1)
{
KEY_Flag = 0; // 执行按键处理任务
Task_Key();
}
if (Key_LongPress == 1)
{
Key_LongPress = 0; // 执行长按按键处理任务
Task_Key_LongPress();
}
if (Key_FastPress == 1)
{
Key_FastPress = 0; // 执行快速点击按键处理任务,用于防抖动
Task_Key_LongPress();
}
}
}
阅读全文