STM32-USART

本文介绍STM32微控制器USART模块的配置方法及串口中断的设置过程。通过详细解析GPIO配置、USART初始化参数设定及中断服务例程,为开发者提供了一个完整的USART初始化示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stm32f10x.h"
#include "stdio.h"  //标准IO库函数
#include "Usart.h"


void Usart_Configurtion(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;


//开启GPIOA & USART1时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //TX IO口配置
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //RX IO口配置
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate=115200; //波特率115200,直接配置多少就是多少,系统会根据时钟自动调整
USART_InitStructure.USART_WordLength=USART_WordLength_8b; //数据位
USART_InitStructure.USART_StopBits=USART_StopBits_1; //停止位
USART_InitStructure.USART_Parity=USART_Parity_No; //奇偶校验位

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //硬件控制流

USART_InitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx; //模式选择


USART_Init(USART1, &USART_InitStructure); //初始化结构体参数到外设
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //接收中断使能
USART_Cmd(USART1,ENABLE); //使能USART1
}


void Usart_NVIC_Configuration(void)   //配置串口中断函数
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  /* Enable the USARTz Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}


void Usart_Init(void) //USART配置
{
Usart_NVIC_Configuration(); //中断配置
Usart_Configurtion(); //USART_IO&工作模式配置
}


//标准库函数重定向发送数据,重定向后即可使用printf();直接发送数据到USART1

//*注:在target中勾选MicroLib

int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (unsigned char) ch);// USART1 ???? USART2 ?


while (!(USART1->SR & USART_FLAG_TXE));


return (ch);

}


//发送数据函数

void Uart_Senddata(u8 data)
{
while(USART_GetBitState(USART1, USART_FLAG_TBE) == RESET); //确保数据全部发送后再执行下次发送
USART_DataSend(USART1,data);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值