实训题目:
格式化函数
可以有多个参数多个占位符
宏定义:右面加分号 调用就不会加分号
还是串口中断:(第四题)接收完成回调函数
在使用定时器时:要有一个
HAL_TIM_Base_Start_IT(&htim2)
#define LED1_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
#define LED2_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
#define LED1_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)
#define LED2_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)
#define LED1_Tog() HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9)
#define LED2_Tog() HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8)
uint8_t str1[]="========XMF07欢迎你!========";
uint8_t hh=0;
uint8_t mm=0;
uint8_t ss=0,ss05=0;
uint8_t str_buff[64];//给这个数组64个字节的长度
uint8_t Rx_dat[16];
void Check_LED()
{
LED1_ON();
HAL_Delay(500);
LED2_ON();
HAL_Delay(500);
LED1_OFF();
HAL_Delay(500);
LED2_OFF();
HAL_Delay(500);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{
LED1_Tog();
ss05++;
if(ss05==2)
{
ss05=0;
ss++;
if(ss==60)
{
ss=0;
mm++;
if(mm==60)
{
mm=0;
hh++;
}
}
}
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)
{
if(Rx_dat[0]==0xBF&&Rx_dat[2]==0xFB)
{
switch(Rx_dat[1])
{
case 0xa1:
LED2_ON();
sprintf((char*)str_buff,"%d:%d:%d LED2打开",hh,mm,ss);
break;
case 0xa2:
LED2_OFF();
sprintf((char*)str_buff,"%d:%d:%d LED2关闭",hh,mm,ss);
break;
default:
sprintf((char*)str_buff,"%d:%d:%d 这是一个错误的命令!",hh,mm,ss);
break;
}
HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
HAL_UART_Receive_IT(&huart1,Rx_dat,3);
}
}
}
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
Check_LED();
HAL_UART_Transmit(&huart1,str1,sizeof(str1),10000); //开机发送了str1这个字符串
HAL_UART_Receive_IT(&huart1,Rx_dat,3);
HAL_TIM_Base_Start_IT(&htim2); //打开定时器2中断