本篇文章将带大家了解串口的编程,串口在比赛当中和实际工程中都是非常重要的,串口的难度也比较大一点,希望大家可以好好理解。
串口一共有两个引脚
PA9—串口发送引脚(TX)
PA10—串口接收引脚(RX)
1.按照原理图配置引脚
2.开启串口中断和波特率设置
这里模式选择异步通信
波特率选择115200即可,波特率越大串口发送数据越快。
波特率主要就是影响数据的发送速率。一般串口发送数据都是8个数据位,一个开始位,一个停止位。
波特率的单位是bps,比如115200bps,就是说明一秒能够发送115200位数据。
发送一共字节一共需要10位8个数据位,一个开始位,一个停止位。
所以使用115200的波特率一秒能够发送 115200/10=11520字节。
函数参数解析
HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);huart://使用哪个串口
pData://发送的数据
Size://发送数据字节大小
Timeout://超时时间
相信大家对于上面的参数都能理解,可能对于Timeout的理解有点模糊。
Timeout:代表超时时间,什么叫超时时间呢?
举个简单的例子:当有其他的函数影响到了HAL_UART_Transmit发送数据时,这个函数会在这里等待一段时间,时间到了返回错误,跳过这个函数的执行。
每接收一次数据都需要重新调用该函数开启接收中断。
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);huart://使用哪个串口
pData://接收的数据
Size://接收数据大小
当发生中断时会调用到该函数。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{}
uint8_t uart_buf[2];
HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart_buf, 1);void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart_buf, 1);
}HAL_UART_Transmit(&huart1, (uint8_t*)"hi\r\n", sizeof("hi\r\n") - 1, 50);
串口中断是非常重要的一部分,大家下去多实验,使用HAL_UART_Transmit来发送数据会感觉很不方便,大家可以看我前面的文章:串口重定向