HAL库学习梳理——UART

   笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。下面对HAL库有关UART课程知识和应用做一个梳理。

省流:

  uint8_t byteNumber = 0x5a;
  uint8_t byteArray[] = {0,1,2,3,4,5};
  char ch = 'a';
  char *str = "Hello word";
  
  HAL_UART_Transmit(&huart1,&byteNumber,1,HAL_MAX_DELAY);                // 发送一个字节
  HAL_UART_Transmit(&huart1,byteArray,6,HAL_MAX_DELAY);                  // 发送一个多个字节
  HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);             // 发送一个字符
  HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen(str),HAL_MAX_DELAY);   // 发送一个字符串

发送数据给 串口外设。

uint8_t Data_Receive;

HAL_UART_Receive(&huart1,&Data_Receive,1,HAL_MAX_DELAY); 

if(Data_Receive == 0)
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
}

将串口接收到的数据保存到自定义的变量中,再判断。

1、串口UART基本原理

串口工作原理
串口的数据帧格式

常用8位无校验的数据帧格式:1 个起始位、1 个停止位、8个数据位。

奇偶校验方法示意
波特率

2、示例

2.1 简单数据传输

(1) GPIO引脚配置

点击UART1 自动分配串口引脚

数据收发引脚

 将PA9发送引脚设置为复用推挽输出,系统自动配置。

  将PA9发送引脚设置为输入模式。手动配置上拉电阻使能,以防这个引脚意外断开,像按键一样。

(2)UART参数配置

选择异步模式(Asynchronus),对下面的参数设置(Parameter Setting)进行配置。

串口参数配置

(3)程序

UART发送数据——HAL函数接口
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();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);   // 点亮LED,C13置0,开漏输出低电压
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);      // 点亮LED,C9置1,推挽输出高电压
      HAL_Delay(500);

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);     // 熄灭LED,C13置1,开漏输出高阻态
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);    // 熄灭LED,C9置0,推挽输出低电压
      HAL_Delay(500);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

2.2 通过串口发送命令点亮LED灯

(1) UART参数配置

参数配置

(2)程序 

UART接收数据——HAL函数接口
int main(void)
{
  /* USER CODE BEGIN 1 */
  uint8_t byteNumber = 0x5a;
  uint8_t byteArray[] = {0,1,2,3,4,5};
  char ch = 'a';
  char *str = "Hello word";
  
  HAL_UART_Transmit(&huart1,&byteNumber,1,HAL_MAX_DELAY);
  HAL_UART_Transmit(&huart1,byteArray,6,HAL_MAX_DELAY);
  HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);
  HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen(str),HAL_MAX_DELAY);
  

  /* 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)
  {
    
    char *Data_Receive;
    
    HAL_UART_Receive(&huart1,(uint8_t *)Data_Receive,sizeof(Data_Receive),HAL_MAX_DELAY);  // 接收UART数据保存到Data_Receive
    if( strncmp(Data_Receive,"on",2)==0)  // 判断
    {
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);   // 点灯
    }
    else if( strncmp(Data_Receive,"off",3)==0)
    {
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
    }
  
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值