STM32 USART使用(学习笔记4)

本文详细介绍了如何在STM32中初始化USART1,包括GPIO端口配置、USART参数设置、NVIC中断配置,以及使用中断方式处理数据接收和发送的过程。
摘要由CSDN通过智能技术生成

这章我们来讲下怎么初始化以及使用USART

现在我们也是先看一下固件库手册:

代码编写:

GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;// 定义GPIO初始化结构体变量
    USART_InitTypeDef USART_InitStructure;// 定义USART初始化结构体变量
    NVIC_InitTypeDef NVIC_InitStructure; // 定义NVIC(嵌套向量中断控制器)初始化结构体变量

// 使能USART1和GPIOA的时钟
// RCC_APB2Periph_USART1: USART1的时钟
// RCC_APB2Periph_GPIOA: GPIOA端口的时钟
// ENABLE: 使能这些时钟
// 这一步是必要的,因为在初始化外设之前需要确保它们的时钟已经被使能
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);

 //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
//USART1_RX	  PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
//Usart1 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器 
初始化USART代码
// 设置USART的波特率,这里的`bound`是一个变量,代表具体的波特率值,一般设置为9600
    USART_InitStructure.USART_BaudRate = bound;
// 设置USART的字长为8位数据格式
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
// 设置USART的停止位为1个停止位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
// 设置USART的奇偶校验位为无,即不使用奇偶校验
    USART_InitStructure.USART_Parity = USART_Parity_No;
// 设置USART的硬件流控制为无,即不使用硬件流控制
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
// 设置USART的模式为收发模式,即USART可以进行接收和发送操作
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
// 使用前面的配置初始化USART1
    USART_Init(USART1, &USART_InitStructure);
// 开启USART1的接收中断(USART_IT_RXNE),当接收到数据时,产生中断
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// 使能USART1,此时USART1根据上面的配置开始工作,可以进行数据的接收和发送
    USART_Cmd(USART1, ENABLE);

这里我用的是中断方式处理的 USART( USART_ITConfig中断使能函数),当STM32接收到USATR数据时候就会转跳到void USART1_IRQHandler(void){ } //串口1中断服务程序(固定的函数名不能修改)来处理

接收数据
USART_GetITStatus(USART1, USART_IT_RXNE)//检测中断状态

就可以通过判断USART_GetITStatus是否接受到了数据

USART_ReceiveData(USART1)//接收USART数据的返回值

发送数据
USART_SendData(USART1, (u8) buffer[i++]);

同时这里还要通过USART_ GetFlagStatus判断USART发送完成没

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //循环等待,直到传输完

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值