资讯专栏INFORMATION COLUMN

串口通信中关键知识点4

zgbgx / 2815人阅读

摘要:串口波特率设置。串口的状态可以通过状态寄存器读取。关闭接收完成中断使能中断通道抢占优先级,子优先级第五编写中断服务函数第六串口数据接收和发送发送与接收是通过数据寄存器来实现。

       串口基本配置的寄存器,配置过程总结为:

1、串口时钟使能。这里的串口1设置是APB2ENR寄存器的第4位。

2、串口波特率设置。每个串口都有一个自己独立的波特 率寄存器 USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的。

3、串口控制。STM32F429 的每个串口都有 3 个控制寄存器 USART_CR1~3,串口的很多 配置都是通过这 3 个寄存器来设置的。这里我们只要用到 USART_CR1 就可以实现我们的功能。

4、数据发送与接收。STM32F429 的发送与接收是通过数据寄存器 USART_DR 来实现的, 这是一个双寄存器,包含了 TDR 和 RDR。

5、串口状态。串口的状态可以通过状态寄存器 USART_SR 读取。

     思考:假如用HAL库进行配置的话,实现过程是什么?

第一:初始化函数 HAL_UART_Init 相关函数:

     HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);

    解释:函数只有一个入口参数 huart,为 UART_HandleTypeDef 结构体指针类型,称为:句柄。

第二:使能串口和 GPIO 口时钟

   使用串口,我们必须使能串口时钟和使用到的 GPIO 口时钟。

 __HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 时钟                                 __HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 时钟

第三:GPIO 口初始化设置(速度,上下拉等)以及复用映射配置

GPIO_InitTypeDef GPIO_Initure;

GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10; //PA9/PA10 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出

GPIO_Initure.Pull=GPIO_PULLUP; //上拉

GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速

GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为 USART1 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9/PA10

第四:开启串口相关中断,配置串口中断优先级

__HAL_UART_ENABLE_IT(huart,UART_IT_RXNE); //开启接收完成中断

第一个参数:huart为串口句柄     第二个参数:要开启的中断类型。

__HAL_UART_DISABLE_IT(huart,UART_IT_RXNE); //关闭接收完成中断

HAL_NVIC_EnableIRQ(USART1_IRQn); //使能 USART1 中断通道 HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级 3,子优先级3

第五:编写中断服务函数

void USART1_IRQHandler(void);

第六:串口数据接收和发送

发送与接收是通过数据寄存器 USART_DR 来实现。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也 是存在该寄存器内。

HAL 库操作 USART_DR 寄存器发送数据的函数是:

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

通过该函数向串口寄存器 USART_DR 写入一个数据:

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/120924.html

相关文章

  • 自己画一块ESP32-C3 的开发板(第一次使用立创EDA)(更新中...)

    摘要:复位系列芯片的复位可使用管脚。这个和保存代码的是不一样的,计划使用。 记录一下第一次使用立创EDA第一次设计ESP-C3的开发板(这几天工作有点忙,稍等) 目录 ...

    MrZONT 评论0 收藏0
  • 阿里云开发板HaaS510解析串口JSON数据并发送属性

    摘要:实验目的通过上位机向发送字符串,由解析提取出指定的属性值,并发送到云平台。详见文档阿里云开发板响应串口指令阿里云开发板响应串口指令第二个知识点,怎么样将字符串解析出关键属性值。 摘要:本文介绍使用HaaS510从串口接收数据,从数据中提取所需的属性值,并发送到物联网平台的方法。从串口接收到的...

    hiYoHoo 评论0 收藏0
  • 串口I2C通信详解介绍(小白初学,浅显易懂,基本知识

    摘要:每个字节后必须跟一个响应位。低速率一般是同一个板子上的两个芯片间通信,数据量不大,速率低。速率几百,速率可能不同,不能超过的最高速率。 介绍:I2C通讯协议(Inter-Integrated Circuit)引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,...

    wua_wua2012 评论0 收藏0
  • 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    摘要:异步通信与同步通信异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。同步通信同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。配置串口设置为异步通信基础参数波特率为。 ...

    yck 评论0 收藏0

发表评论

0条评论

zgbgx

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<