用串口设置计时器计时时间

1559
0
2022-05-24 00:27:13
正在缓冲...
9
2
8
7
实现以下功能:开机后,单片机从串口发出"input time in ms:\r\n"以提示用户从UART输入以毫秒表示的倒计时时间,然后从UART接收一个整数作为倒计时毫秒时间,开始计时,时间到了之后从UART提示“"time's up!”并结束计时。 知识点: 定时器开启HAL_TIM_Base_Start_IT 定时器关闭HAL_TIM_Base_Stop_IT 定时器中断回调名:HAL_TIM_PeriodElapsedCallback 改变计数周期数:__HAL_TIM_SET_AUTORELOAD(&htimX,inputnum); 伪代码如下: ------------- 在主程序中: 接受输入; 改变计时器的值为输入的值; 开启计时器; 在定时器回调中: 打印"time's up! 关闭计时器; ------------- 利用串口实现printf/scanf函数。 参考:https://forum.digikey.com/t/easily-use-scanf-on-stm32/21103 在用户代码区位置加上这两段代码: /* USER CODE BEGIN Includes */ #include <stdio.h> /* USER CODE END Includes */ /* USER CODE BEGIN PFP */ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #define GETCHAR_PROTOTYPE int __io_getchar(void) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #define GETCHAR_PROTOTYPE int fgetc(FILE *f) #endif PUTCHAR_PROTOTYPE {  HAL_UART_Transmit(&huart?, (uint8_t *)&ch, 1, HAL_MAX_DELAY);  return ch; } GETCHAR_PROTOTYPE {  uint8_t ch = 0;  /* Clear the Overrun flag just before receiving the first character */  __HAL_UART_CLEAR_OREFLAG(&huart?);  /* Wait for reception of a character on the USART RX line and echo this   * character on console */  HAL_UART_Receive(&huart?, (uint8_t *)&ch, 1, HAL_MAX_DELAY);  HAL_UART_Transmit(&huart?, (uint8_t *)&ch, 1, HAL_MAX_DELAY);  return ch; } /* USER CODE END PFP */
好好学习天天向上!
接下来播放
自动连播
客服
顶部
赛事库 课堂 2021拜年纪