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 @ 2017-08-11 12:51  thomas_blog  阅读(116)  评论(0编辑  收藏  举报