173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32的usart6怎么使用

keros@mark 2023-03-18 资讯中心

stm32串口通用怎么加功能

串口应该怎么使用

1.使能串口时钟+使能GPIO时钟

2.设置引脚的复位映射

3.配置GPIO引脚初始化,GPIO引脚的模式改为复用模式

4.配置串口的参数

5.中断优先级+配置NVIC初始化

6.使能串口

7.编写中断服务函数

---------------------------------

1.硬件图 (day04/串口.png)

2.

a.使能串口时钟 RCC_APB2PeriphClockCmd

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

参数1:uint32_t RCC_APB2Periph 串口号

RCC_APB2Periph_USART1

参数2:FunctionalState NewState

ENABLE 开启使能 DISABLE 关闭使能

b.设置引脚的复位映射 GPIO_PinAFConfig()

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)

参数1:GPIO_TypeDef* GPIOx 组别

GPIOA ---GPIOG

参数2:uint16_t GPIO_PinSource 引脚号

GPIO_PinSourcex where x can be (0..15).

参数3:uint8_t GPIO_AF

@arg GPIO_AF_USART1: Connect USART1 pins to AF7

@arg GPIO_AF_USART2: Connect USART2 pins to AF7

@arg GPIO_AF_USART3: Connect USART3 pins to AF7

@arg GPIO_AF_UART4: Connect UART4 pins to AF8

@arg GPIO_AF_UART5: Connect UART5 pins to AF8

@arg GPIO_AF_USART6: Connect USART6 pins to AF8

@arg GPIO_AF_UART7: Connect UART7 pins to AF8

@arg GPIO_AF_UART8: Connect UART8 pins to AF8

等下配置复用功能 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;//复用模式

c.配置串口的参数 USART_Init

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

参数1:USART_TypeDef* USARTx 串口号

USARTx: where x can be 1, 2, 3, 4, 5, 6, 7 or 8

参数2:USART_InitTypeDef* USART_InitStruct

typedef struct

{

uint32_t USART_BaudRate; /*! 波特率 */

uint16_t USART_WordLength; /*! 字节长度 */

uint16_t USART_StopBits; /*! 停止位 */

uint16_t USART_Parity; /*! 奇偶校验位 */

uint16_t USART_Mode; /*! 模式配置*/

uint16_t USART_HardwareFlowControl; /*! 硬件控制流 */

} USART_InitTypeDef;

1.常用的波特率 是9600 115200

2.

/** @defgroup USART_Word_Length

* @{

*/

#define USART_WordLength_8b ((uint16_t)0x0000)//8位

#define USART_WordLength_9b ((uint16_t)0x1000)//9位

3.

/** @defgroup USART_Stop_Bits

* @{

*/

#define USART_StopBits_1 ((uint16_t)0x0000)

#define USART_StopBits_0_5 ((uint16_t)0x1000)

#define USART_StopBits_2 ((uint16_t)0x2000)

#define USART_StopBits_1_5 ((uint16_t)0x3000)

4./** @defgroup USART_Parity

* @{

*/

#define USART_Parity_No ((uint16_t)0x0000)//常用

#define USART_Parity_Even((uint16_t)0x0400)//奇校验

#define USART_Parity_Odd ((uint16_t)0x0600)//偶校验

5.

/** @defgroup USART_Mode

* @{

*/

#define USART_Mode_Rx ((uint16_t)0x0004)//接收

#define USART_Mode_Tx ((uint16_t)0x0008)//发送

6.

/** @defgroup USART_Hardware_Flow_Control

* @{

*/

#define USART_HardwareFlowControl_None ((uint16_t)0x0000)//无流控

#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100)

#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200)

#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300)

d.中断优先级+配置NVIC初始化

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

参数:uint32_t NVIC_PriorityGroup

@arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority

4 bits for subpriority

@arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority

3 bits for subpriority

@arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority

2 bits for subpriority

@arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority

1 bits for subpriority

@arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority

0 bits for subpriority

配置中断分组 NVIC_Init()

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

typedef struct

{

uint8_t NVIC_IRQChannel; /*!中断线 */

uint8_t NVIC_IRQChannelPreemptionPriority; /*! 抢占优先级 */

uint8_t NVIC_IRQChannelSubPriority; /*! 响应优先级*/

FunctionalState NVIC_IRQChannelCmd; /*!权限*/

} NVIC_InitTypeDef;

1.

USART1_IRQn = 37, /*! USART1 global Interrupt */

USART2_IRQn = 38, /*! USART2 global Interrupt */

USART3_IRQn = 39, /*! USART3 global Interrupt

5# 关于 STM32 中 USART 库文件

  USART是通用(U)同步(S)异步(A)收(R)发(T)器。

  STM32F103VGT6上有3个USART和2个UART。

  同步与异步的区别是:

  通信时是否需要对外提供时钟输出。

官方的usart头文件为:

stm32f10x_usart.h

  USART有2个结构体:

与USART运行相关:

USART_InitTypeDef

成员有:

  // 波特率

  USART_BaudRate

  // 字长

  USART_WordLength

  // 停止位

  USART_StopBits

  // 校验位

  USART_Parity

  // USART模式

  USART_Mode

  // 硬件流控制

  USART_HardwareFlowControl

与该成员相关的宏定义有:

  USART_WordLength

    USART_WordLength_8b

    USART_WordLength_9b

  USART_Stop_Bits

    USART_StopBits_1

    USART_StopBits_0_5

    USART_StopBits_2

    USART_StopBits_1_5

  USART_Parity

    USART_Parity_No

    USART_Parity_Even

    USART_Parity_Odd

  USART_Mode

    USART_Mode_Rx

    USART_Mode_Tx

  USART_Hardware_Flow_Control

    USART_HardwareFlowControl_None

    USART_HardwareFlowControl_RTS

    USART_HardwareFlowControl_CTS

    USART_HardwareFlowControl_RTS_CTS

另一个结构体与同步通信相关。

USART_ClockInitTypeDef

成员有:

  USART_Clock // 时钟使能控制

  USART_CPOL // 时钟极性控制

  USART_CPHA // 时钟相位控制

  USART_LastBit // 最尾位时钟脉冲控制

该类成员相关的宏定义

  USART_Clock

    USART_Clock_Disable

    USART_Clock_Enable

  USART_CPOL

    USART_CPOL_Low

    USART_CPOL_High

  USART_CPHA

    USART_CPHA_1Edge

    USART_CPHA_2Edge

  USART_LastBit

    USART_LastBit_Disable

    USART_LastBit_Enable

// 使用输入的配置信息USART_InitStruct对于USARTx,进行初始化

USART_Init(USART_TypeDef* USARTx,USART_InitTypeDef* USART_InitStruct);

// 使能串口接收中断

USART_ITConfig(USART_TypeDef* USARTx,uint16_t USART_IT, FunctionalState NewState);

// 使能串口USARTx,NewState=(ENABLE/DISABLE)

USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

// 在 USARTx 中发送数据Data

USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

// 确认串口USARTx的一些标志位是 set状态还是reset状态

USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

  USART_FLAG有:

    USART_FLAG_CTS

    USART_FLAG_LBD

    USART_FLAG_TXE 数据发送寄存器是否为空

    USART_FLAG_TC 数据发送完成标志

    USART_FLAG_RXNE 数据接收寄存器是否不为空

    USART_FLAG_IDLE

    USART_FLAG_ORE

    USART_FLAG_NE

    USART_FLAG_FE

    USART_FLAG_PE

// 类似USART_GetFlagStatus,但是专门用来判断中断时间的状态

USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

  USART_IT有:

    USART_IT_CTS

    USART_IT_LBD

    USART_IT_TXE

    USART_IT_TC

    USART_IT_RXNE 数据接收寄存器是否不为空

    USART_IT_IDLE

    USART_IT_ORE_RX

    USART_IT_ORE_ER

    USART_IT_NE

    USART_IT_FE

    USART_IT_PE

// 获取USARTx接收到的数据

USART_ReceiveData(USART_TypeDef* USARTx);

  如果想使用printf来打印调试信息,则生成项目时候需要如下勾选:

  会生成两个文件:

    syscalls.c和tiny_printf.c

修改 syscalls.c 中的 _write 函数如下:

并在开头加入:

这样就能使用printf了。

程序中自己编写“bsp_usart.c”,“bsp_usart.h”,“main.c”这三个文件:

“bsp_usart.c”文件如下:

“bsp_usart.h”文件如下:

主函数如下:

TrueSTUDIO自带串口通信工具:

由此可见 \r\n 才是真正的回车。

STM32的USART发送数据时如何使用TXE和TC标志

TXE由硬件来管理。当 if(USART_GetITStatus(USART1,USART_IT_TXE) != RESET) 时表明:

数据已经从TDR 移送到移位寄存器,数据发送已经开始;TDR 寄存器被清空;下一个数据可以被写进USART_DR 寄存器而不会覆盖先前的数据,如USART_SendData(USART1, Framewaitsndbuf[ptrshowfra][ptrusart1]),如果此时USART 正在发送数据,对USART_DR 寄存器的写操作把数据存进TDR 寄存器,并在当前传输结束时把该数据复制进移位寄存器。如果此时USART 没有在发送数据,处于空闲状态,对USART_DR 寄存器的写操作直接把数据放进移位寄存器,数据传输开始,TXE 位立即被置起。通常串口中断发送用这种方式。

当一帧发送完成时(停止位发送后),TC 位被置起,并且如果USART_CR1 寄存器中的

TCIE 位被置起时,中断产生。先读一下USART_SR 寄存器,再写一下USART_DR 寄存器,可以完成对TC 位的清零。

本文标签:stm32的usart6怎么使用

产品列表
产品封装
友情链接