当前位置: 首页 > article >正文

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 */
}


http://www.kler.cn/a/303551.html

相关文章:

  • 企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群
  • HarmonyOS Next星河版笔记--界面开发(5)
  • 基于Java Springboot快递物流管理系统
  • MySQL查询某个数据库中特定表的空间占用大小
  • CentOS网络配置
  • 批量从Excel某一列中找到符合要求的值并提取其对应数据
  • HarmonyOS NEXT应用开发性能实践总结
  • 太牛了!顺丰丰语大语言模型:已应用于20余个场景
  • 数据结构实验1
  • 电力系统调度控制台的功能有哪些
  • 【devops】devops-git之介绍以及日常使用
  • Winform中引入WPF控件后键盘输入无响应
  • Vue.js 中的 DOM 更新之后执行某些操作
  • uniapp与webview直接进行传值
  • vscode ssh离线远程连接ubuntu调试
  • python学习第九节:爬虫实战-抓取地址库
  • C语言 12 函数
  • Java二级信息收集
  • yarn webpack脚手架 react+ts搭建项目
  • ELK 架构中 ES 性能优化
  • 简单聊聊bait文件
  • 班组建设中如何避免团队协作的问题?
  • PEI转染试剂原理
  • 探索代码的守护者:Pyflakes,Python代码的隐形盾牌
  • SpringBoot依赖之Spring Boot Admin(二)
  • 在 macOS 上安装 Python 3 并设置本地编程环境的方法