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函数直接读取状态标志

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值