stm32f407探索者开发板(十七)——串口寄存器库函数配置方法

简介: stm32f407探索者开发板(十七)——串口寄存器库函数配置方法

一、STM32串口常用寄存器和库函数

1.1 常用的串口寄存器

USART_ SR状态寄存器

USART_ DR数据寄存器

USART_BRR波特率寄存器

1.2 串口相关的库函数

void USART_ Init();           //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART Cmd();             //使能串口
void USART ITConfig0;         //使能相关中断

void USART SendData();        //发送数据到串口,DR
uint16 t USART ReceiveData(); //接受数据,从DR读取接受到的数据

FlagStatus USART GetFlagStatus(); //获取状态标志位
void USART ClearFlag();           //清除状态标志位
ITStatus USART GetlTStatus);      //获取中断状态标志位
void USART_ ClearlTPendingBit);   //清除中断状态标志位

1.3 状态寄存器(USART_ SR)

所用函数

FlagStatus USART_GetFlagStatus(USART TypeDef USARTx; uint16 t USART_FLAG);

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_FLAG(USART_FLAG));

  /* The CTS flag is not available for UART4 and UART5 */
  if (USART_FLAG == USART_FLAG_CTS)
  {
    assert_param(IS_USART_1236_PERIPH(USARTx));
  } 
    
  if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}

1.4 数据寄存器(USART_ DR)

相关函数

void USART SendData(USART TypeDef* USARTx, uint16 t Data);

uint16_t USART_ ReceiveData(USARTTypeDef* USARTx)

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data)); 
    
  /* Transmit Data */
  USARTx->DR = (Data & (uint16_t)0x01FF);
}



uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* Receive Data */
  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}

1.5 波特率寄存器(USART_BRR)

关于波特率的计算

小数部分需要乘上16

void USART Init(USART TypeDef* USARTx; USART_ InitTypeDef* USART: InitStruct)

第一个入口参数是用来确实是哪个串口

#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \
                                     ((PERIPH) == USART2) || \
                                     ((PERIPH) == USART3) || \
                                     ((PERIPH) == UART4)  || \
                                     ((PERIPH) == UART5)  || \
                                     ((PERIPH) == USART6) || \
                                     ((PERIPH) == UART7)  || \
                                     ((PERIPH) == UART8)) 1-8个

第二个入口参数结构体,就是设置串口的一些变量

typedef struct
{
  uint32_t USART_BaudRate;            //设置波特率
  uint16_t USART_WordLength;          //设置字长,8/9
  uint16_t USART_StopBits;            //停止位
  uint16_t USART_Parity;              //奇偶校验
  uint16_t USART_Mode;                //使能发送/控制
  uint16_t USART_HardwareFlowControl; //硬件控制(本次不用)
} USART_InitTypeDef;

二、串口配置一般步骤

串口时钟使能: RCC_APBxPeriphClockCmd);

GPIO时钟使能: RCC_ AHB1PeriphClockCmd();

引脚复用映射:GPIO_PinAFConfig();

GPIO端口模式设置:GPIO _Init(); 模式设置为GPIO_Mode_ AF

串口参数初始化: USART_ Init();

开启中断并且初始化NVIC ( 如果需要开启中断才需要这个步骤)

NVIC_ Init();

USART_ITConfig();

使能串口:USART_Cmd();

编写中断处理函数: USARTX_ IRQHandler();

串口数据收发:

void USART_SendData();//发送数据到串口,DR

uint16_ t USART_ReceiveData();//接受数据,从DR读取接受到的数据

串口传输状态获取:

FlagStatus USART_GetFlagStatus();

void USART_ClearlTPendingBit();

相关文章
|
1月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
|
1月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
|
1月前
|
程序员
stm32f407探索者开发板(二十一)——窗口看门狗
stm32f407探索者开发板(二十一)——窗口看门狗
|
1月前
|
芯片
stm32f407探索者开发板(二十)——独立看门狗实验
stm32f407探索者开发板(二十)——独立看门狗实验
|
2月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
151 2
|
3月前
|
传感器
|
2月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
289 4
|
2月前
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
61 1
|
2月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
215 2
|
1月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。