STM32的定时器和串口的综合训练

实训题目:

格式化函数

可以有多个参数多个占位符

宏定义:右面加分号     调用就不会加分号

还是串口中断:(第四题)接收完成回调函数

在使用定时器时:要有一个

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中断

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值