目录
配置CubeMx工程
时钟
只需要在这里填入72,系统会自动配置打开串口中断
配置串口结构体
通讯模式设置为异步通信
代码
主要库函数介绍
1.阻断式串口发送函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
第一个参数为串口结构体地址
第二个参数为要发送的数据的地址或是数组
第三个参数为发送的数据长度,常利用函数sizeof()
第四个参数设置超时长度,当超过设定的单位长度的时间时,中止发送
特点:代码简单,但是在发送完成之前会占用MCU资源,单片机不能做其他的事情
2.阻断式串口接收函数
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
参数特点同阻断式发送函数相同
3.非阻断式串口发送函数
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
第一个参数为串口的结构体
第二个参数为发送的数据的地址或者数组名
第三个参数为发送的数据长度
特点:利用串口中断进行发送,占用MCU资源较少,串口发送中断服务结束后会进入串口发送中断回调函数,可以在回调函数中编写代码
4.非阻断式串口接收函数
HAL_UART_Receive_IT(&huart1,&Usart_Get,1);
参数和特点同非阻断式串口发送函数
实现代码
main.c
unsigned char Usart_Send[]="hello world";
unsigned char Led_On_Send[]="Led Open";
unsigned char Led_Off_Send[]="Led Off";
unsigned char Usart_Get;
int main()
{
...
...
HAL_UART_Transmit(&huart1,Usart_Send,sizeof(Usart_Send),10000);//发送函数
HAL_UART_Receive_IT(&huart1,&Usart_Get,1);
while (1)
{
/* USER CODE END WHILE */
...
/* USER CODE BEGIN 3 */
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)//判断串口的实例是否是串口1
{
if(Usart_Get==0xa1)
{
Led1_On();
HAL_UART_Transmit(&huart1,Led_On_Send,sizeof(Led_On_Send),10000);
}
}
if(huart->Instance==USART1)
{
if(Usart_Get==0xa2)
{
Led1_Off();
HAL_UART_Transmit(&huart1,Led_Off_Send,sizeof(Led_Off_Send),10000);
}
}
HAL_UART_Receive_IT(&huart1,&Usart_Get,1);//回调函数结束后,再次进入中断服务函数
}