#05——串行接口
1.原理
2.CubeMX配置
3.Hal库 发送函数
返回值:HAL_StatusTypeDef,函数执行状态。
typedef enum
{
HAL_OK = 0x00U,
HAL_ERROR = 0x01U,
HAL_BUSY = 0x02U,
HAL_TIMEOUT = 0x03U
} HAL_StatusTypeDef;
4.Hal库 接收函数
5.1实训——CubeMX配置
5.2实训——MDK编程
宏定义&发送数据缓冲
#define LED1_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
#define LED1_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)
#define LED2_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
#define LED2_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)
uint8_t Tx_str1[] = "hello world!\r\n";
uint8_t Tx_str2[] = "LED1 Open!\r\n";
uint8_t Tx_str3[] = "LED1 Closed!\r\n";
uint8_t Rx_dat = 0;
接收回调函数重写
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
if(Rx_dat == 0xa1)
{
LED1_ON();
LED2_ON();
HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000);
LED2_OFF();
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
else if(Rx_dat == 0xa2)
{
LED1_OFF();
LED2_ON();
HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000);
LED2_OFF();
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
}
}
main函数中 while(1)外
//在mian()函数中添加以下代码:
LED2_ON();
HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000); //向上位机发送“hello world!”
LED2_OFF();
HAL_UART_Receive_IT(&huart1,&Rx_dat,1); //启动串口1接收上位机1个字节
串口接收到的字符型数据转化成数字:
k = USART_RXBuff[3]-0x30;
或者:
k = USART_RXBuff[3]-'0';
【printf 重定向】
#include "stdio.h"
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart2,temp,1,2);
return 0;
}
注:
这是我的学习笔记。
来自B站视频(av号:av87017878)
这个UP的原博客为:https://www.xmf393.com/2020/02/10/20200210/