stm32 usart 串口

比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符, 而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:

  • 10位 × 240个/秒 = 2400bps
    1
    USART 串口通信配置步骤

1.使能串口时钟
2.使能GPIO端口时钟
3.GPIO端口模式设置
4.初始化串口参数,波特率、 数据位、 停止位,校验位等
5.使能串口
6.设置串口中断类型并使能
7.初始化NVIC外设,设置串口中断优先级
8.编写串口中断处理函数

举例

void USART1_IRQHandler() //中断处理函数
{
	u8 r;

	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
	{
		USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清中断
		
		r = USART_ReceiveData(USART1);
		
		USART_SendData(USART1, r);
		//while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
		//USART_ClearFlag(USART1, USART_FLAG_TC);
	}
}

void uart1_init()
{
	GPIO_InitTypeDef gpio9 = 
	{
		GPIO_Pin_9, //TX
		GPIO_Speed_50MHz,
		GPIO_Mode_AF_PP //复用推挽输出
	};

	GPIO_InitTypeDef gpio10 = 
	{
		GPIO_Pin_10, //RX
		GPIO_Speed_50MHz,
		GPIO_Mode_IN_FLOATING //浮空
	};

	USART_InitTypeDef usart = 
	{
		9600,
		USART_WordLength_8b,
		USART_StopBits_1,
		USART_Parity_No,
		USART_Mode_Rx | USART_Mode_Tx,
		USART_HardwareFlowControl_None, //硬件流控制
	};

	NVIC_InitTypeDef nvic = 
	{
		USART1_IRQn,
		2,
		2,
		ENABLE
	};

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能串口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO端口时钟

	GPIO_Init(GPIOA, &gpio9); //GPIO端口模式设置
	GPIO_Init(GPIOA, &gpio10);

	USART_Init(USART1, &usart); //初始化串口

	USART_ClearFlag(USART1, USART_FLAG_TC);

	USART_Cmd(USART1, ENABLE); //使能串口

	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //设置串口中断类型并使能(接收中断)

	NVIC_Init(&nvic); //初始化NVIC
}

注:USART_GetITStatus与USART_GetFlagStatus功能类似,区别是USART_GetITStatus函数会先判断是否使能串口中断,使能后才读取状态标志,而USART_GetFlagStatus函数直接读取状态标志

posted @   thomas_blog  阅读(125)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示