STM32F7xx —— 串口通信

发布者:PeacefulAura最新更新时间:2020-12-16 来源: eefocus关键字:STM32F7xx  串口通信  初始化 手机看文章 扫描二维码
随时随地手机看文章

一、串口初始化过程

1、时钟使能;


2、GPIO初始化;


3、串口波特率设置;


4、串口控制;


5、数据发送与接收


 


二、几个重要的串口函数

HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); // 串口初始化

 

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 串口发送

 

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 串口接收

 

__HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)  // 串口中断使能

 

void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); // 设置中断优先级

 

void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); // 使能中断

三、几个重要的结构

// 串口初始化结构体 包含了串口句柄 波特率配置 发送接收缓存 dma等

// 我们只描述前两个基本功能,对效率要求极高可以使用DMA。

typedef struct

{

  USART_TypeDef            *Instance;        /*!< UART registers base address        */

 

  UART_InitTypeDef         Init;             /*!< UART communication parameters      */

 

  UART_AdvFeatureInitTypeDef AdvancedInit;   /*!< UART Advanced Features initialization parameters */

 

  uint8_t                  *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */

 

  uint16_t                 TxXferSize;       /*!< UART Tx Transfer size              */

 

  uint16_t                 TxXferCount;      /*!< UART Tx Transfer Counter           */

 

  uint8_t                  *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */

 

  uint16_t                 RxXferSize;       /*!< UART Rx Transfer size              */

 

  uint16_t                 RxXferCount;      /*!< UART Rx Transfer Counter           */

 

  uint16_t                 Mask;             /*!< UART Rx RDR register mask          */

 

  DMA_HandleTypeDef        *hdmatx;          /*!< UART Tx DMA Handle parameters      */

 

  DMA_HandleTypeDef        *hdmarx;          /*!< UART Rx DMA Handle parameters      */

 

  HAL_LockTypeDef           Lock;            /*!< Locking object                     */

 

  __IO HAL_UART_StateTypeDef    gState;      /*!< UART state information related to global Handle management 

                                                  and also related to Tx operations.

                                                  This parameter can be a value of @ref HAL_UART_StateTypeDef */

 

  __IO HAL_UART_StateTypeDef    RxState;     /*!< UART state information related to Rx operations.

                                                  This parameter can be a value of @ref HAL_UART_StateTypeDef */

 

  __IO uint32_t             ErrorCode;   /*!< UART Error code                    */

 

}UART_HandleTypeDef;

// 串口的操作句柄 如 USART1 USART2 USART3等

typedef struct

{

  __IO uint32_t CR1;    /*!< USART Control register 1,                 Address offset: 0x00 */ 

  __IO uint32_t CR2;    /*!< USART Control register 2,                 Address offset: 0x04 */ 

  __IO uint32_t CR3;    /*!< USART Control register 3,                 Address offset: 0x08 */

  __IO uint32_t BRR;    /*!< USART Baud rate register,                 Address offset: 0x0C */                                               

  __IO uint32_t GTPR;   /*!< USART Guard time and prescaler register,  Address offset: 0x10 */

  __IO uint32_t RTOR;   /*!< USART Receiver Time Out register,         Address offset: 0x14 */  

  __IO uint32_t RQR;    /*!< USART Request register,                   Address offset: 0x18 */

  __IO uint32_t ISR;    /*!< USART Interrupt and status register,      Address offset: 0x1C */

  __IO uint32_t ICR;    /*!< USART Interrupt flag Clear register,      Address offset: 0x20 */

  __IO uint32_t RDR;    /*!< USART Receive Data register,              Address offset: 0x24 */

  __IO uint32_t TDR;    /*!< USART Transmit Data register,             Address offset: 0x28 */

} USART_TypeDef;

// 设置串口的各个参数 波特率 字长 停止位 奇偶校验 收发模式 硬件流 过采样

// 字长:8位/9位

// 停止位:1位/2位

typedef struct

{

  uint32_t BaudRate;                  /*!< This member configures the UART communication baud rate.

                                           The baud rate register is computed using the following formula:

                                           - If oversampling is 16 or in LIN mode,

                                              Baud Rate Register = ((PCLKx) / ((huart->Init.BaudRate)))

                                           - If oversampling is 8,

                                              Baud Rate Register[15:4] = ((2 * PCLKx) / ((huart->Init.BaudRate)))[15:4]

                                              Baud Rate Register[3] =  0

                                              Baud Rate Register[2:0] =  (((2 * PCLKx) / ((huart->Init.BaudRate)))[3:0]) >> 1      */

 

  uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.

                                           This parameter can be a value of @ref UARTEx_Word_Length */

 

  uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.

                                           This parameter can be a value of @ref UART_Stop_Bits */

 

  uint32_t Parity;                    /*!< Specifies the parity mode.

                                           This parameter can be a value of @ref UART_Parity

                                           @note When parity is enabled, the computed parity is inserted

                                                 at the MSB position of the transmitted data (9th bit when

                                                 the word length is set to 9 data bits; 8th bit when the

                                                 word length is set to 8 data bits). */

 

  uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.

                                           This parameter can be a value of @ref UART_Mode */

[1] [2] [3]
关键字:STM32F7xx  串口通信  初始化 引用地址:STM32F7xx —— 串口通信

上一篇:STM32F7xx —— CAN通信
下一篇:STM32F7xx —— 输入

推荐阅读最新更新时间:2024-11-09 23:02

单片机和PC通过串口通信
通信协议:每次PC向单片机发送10个字节的数据,第一个字节为0XFA,数据开始标志,后面8个字节为任意数据,最后一个字节为前9个数据和的低字节(高字节忽略),作为校验和。 串口设置:PC串口参数设置 串口号 : COM1(默认,具体视使用情况而定) 波特率 : 9600 数据位 : 8 其他默认 测试方法:可以用串口调试工具的字符串输入框输入:FA FA FA FA FA FA FA FA FA CA,选择HEX发送,HEX显示,如果每发送一次就接收到以上数据,并在单片机开发板上正确显示,则测试成功。 //52单片机串口接收和发送测试程序; //接收采用中断方式,发送采用查询方式
[单片机]
MC9S12G128 串口通信
/***************************************************************** ** 程序名:MC9S12G128 串口 ** 参 数:BusCLK_nM 总线时钟 ** 功 能:使用G128串口通信 ** 注 意:程序中使用的是G128的第一路串口,即(S0,S1) ** 作 者: ** 版 本:v1.0 ** 时 间:2012.5.9 ******************************************************************/ #include hidef.h #include derivative
[单片机]
s3c2440裸机-nandflash编程-3-初始化及识别
nandFlash命令表 对NAND FLASH的操作需要发出命令,下面有个NAND FLASH的命令表格,那么我们可以此表格上的命令来访问我们的nandflash. 1)时序分析 上面命令表中的读id还不太直观,下图是从nand芯片手册中截取出的读id时序图: ①第一条竖线位置,发送了nCE,CLE,nWE信号,所以90命令被锁存(readID命令); ②第二条竖线位置,发送了nCE,ALE,nWE信号,所以地址00被锁存; 继续往后,命令、地址都发完了,要read数据了,所以释放nWE,ALE,这里tAR表示ALE释放多久后才可以发送nRE信号,tREA表示nRE信号的建立时间; ③第三条竖线位置,发送了nCE,n
[单片机]
STM32串口通信的重要性
刚开始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续学习下去的动力。 但是数据相关的实验是学习单片机和STM32的一道坎,此时就需要用好本文要说的串口这个调试工具。 串口通信介绍 关于串口通信的介绍,也可以点击阅读之前发的一篇文章。 STM32串口通信基本原理 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。..。..这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。 串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。 如何使用串口通讯,你需要知道的几个重要的知识点
[单片机]
TQ2440国嵌学院gboot-内存初始化
The S3C2440A memory controller provides memory control signals that are required for external memory access. The S3C2440A has the following features: Little/Big endian ( selectable by a software) Address space: 128Mbytes per bank (total 1GB/8 banks) Programmable access size (8/16/32-bit) for all banks except bank0 (
[单片机]
Part5核心初始化_lesson4---关闭中断
1、关闭cpsr寄存器里面的I(中断)和F(快速中断)位; 2、设置中断屏蔽寄存器。 针对2440: 这是中断处理过程,当有中断源(没有子中断源)来的时候,它会把这个中断记录在SRCPND里面;它还要经过MASK屏蔽寄存器,如果我们对对应位屏蔽了,那么它就无法进入到IRQ这里来处理。对于有子中断源的同理。 其代码: 针对6410: 打开S3C6410X文件,进入到Vectored Interrupt Controller这个章节, 6410和210采用的是向量中断的方式, 在6410要去屏蔽一个寄存器应该用那个寄存器呢?在6410里面中断源被分为了两组,第0组,VIC0和第1组,VIC1; 往这两个寄存器里面写入全1,
[单片机]
Part5核心<font color='red'>初始化</font>_lesson4---关闭中断
51单片机串口通信 采用中断方式
/*----------------------------------------------- 功能: 连接串口到电脑,下载该程序,打开电源 打开串口调试助手,将波特率设置为2400,无奇偶校验 晶振12MHz,发送和接收使用的格式相同,如都使用 字符型格式,设置正确后接受框可以显示出: The UART test, 请在发送区输入信息 ------------------------------------------------*/ #include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
[单片机]
21.核心初始化之svc模式
要设置系统工作svc特权模式,从前面的学习知道这需要设置CPSR程序状态寄存器。 在ARM Architecture Reference Manual.pdf文档中,2.Programmers' Model的2.5.Program status register。 可以看到CPSR的最后五位:M ,就是来设置系统工作的系统模式。 接下来就是把CPSR的最后五位设置为0b10011,就是完成了设置系统的SVC模式。 实现的思路是: 取得这五位 清零,使用bic位清零指令。 置第0,1,4位为1,即可,使用orr位或指令。 要取得CPSR的后五位,由于是操作CPSR/SPSR,不能像操作一般的寄存器一样,直接操
[单片机]
21.核心<font color='red'>初始化</font>之svc模式
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved