第三天串口调试
虽然任务模块不涉及串口调试,但是
串口调试还是对我们debug很有用
这里还是顺便做一下串口
stmcubemx
首先还是查看板子的原理图
可以看到串口分别是PA9、PA10
如果想用别的 usart 要自己更改跳帽的连接
随后在cubemx中选择PA9 PA10
两个引脚都先选择usart功能,防止引脚复用出现问题
现在两个引脚应该是黄色
然后再选择usart1
两个引脚变成绿色
选择模式异步通信
波特率9600
校验位8 停止位1
然后生成代码,硬件配置就完成了
当人你也可以把串口中断选上
keil5代码
串口调试就选择正常的非中断模式进行(阻塞模式)
函数原型是
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
带 IT 的是中断方式
函数解析
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数分别是串口,传送的数据,传送数据的大小,超时时间
其中超时时间是可以任意设置的,你可以设置成最大值
程序怕出现问题才会出现这个超时时间
如果选用中断方式则不会出现这个问题
首先添加一个头文件
#include "stdio.h"
然后设置一个全局变量
uint8_t send_date[64] = {0};
keil5中一定要注意定义变量的时候对变量赋初值
否则会引发不必要的麻烦
最后是main函数中的内容
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
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_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//串口调试
sprintf((char *)send_date,"test daten");
HAL_UART_Transmit(&huart1, send_date, sizeof(send_date), 100);
//HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
sprintf函数是在stdio.h中定义的,属于赋值函数,同时可以将变量赋值进去
很方便
个人不太喜欢修改printf函数,感觉比较麻烦,还要修改底层的重定义
效果
打开串口调试助手设置相应的波特率
灯亮是因为day2中GPIO的实验
没有把那三个RGB通道关闭,导致的
你也可以在程序中关掉就不会亮了
给孩子点个赞吧