串口内容总结

本文详细介绍了STM32串口配置的步骤,包括时钟使能、GPIO设置、串口参数初始化、中断配置及NVIC初始化。在功能概述中,提到了串口的字长可编程、数据帧格式以及空闲和断开符号的识别。串口1的中断服务流程中,重点展示了接收中断处理,确保接收到的数据以0x0d0x0a结尾。

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

一.串口配置的一般步骤:

  1. 串口时钟使能,GPIO时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);

  1. 串口复位(非必须)
  2. GPIO端口模式设置

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);//初始化GPIOA.9

  1. 串口参数初始化

USART_InitStructure.USART_BaudRate = bound;//串口波特率

 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

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); //初始化串口1

  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断

  1. 开启中断并初始化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寄存器

6.使能串口:

                 USART_Cmd(USART1, ENABLE); 

7.编写中断处理函数:

               void USART1_IRQHandler(void)   

8.串口数据收发:

              USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据

9.串口传输状态获取

 

宏定义中注意点:

#define USART_REC_LEN                          200         //定义最大接收字节数 200

#define EN_USART1_RX                    1               //使能(1)/禁止(0)串口1接收

 

 

二.功能概述

1.字长可以通过编程USART_CR1寄存器中的M位,选择成8或9位。

2.在起始位期间,TX 脚处于低电平,在停止位期间处于高电平。

3.空闲符号被视为完全由’1’组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位(‘1’ 的位数也包括了停止位的位数)。

4.断开符号 被视为在一个帧周期内全部收到’0’(包括停止位期间,也是’0’)。

5.在断开帧结束时,发 送器再插入1或2个停止位(‘1’)来应答起始位。

6.发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其 产生时钟。

三.串口1的中断服务流程:

void USART1_IRQHandler(void)               

{

         u8 Res;

#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.

         OSIntEnter();   

#endif

         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

                  {

                  Res =USART_ReceiveData(USART1); //读取接收到的数据

                 

                  if((USART_RX_STA&0x8000)==0)//接收未完成

                          {

                          if(USART_RX_STA&0x4000)//接收到了0x0d

                                   {

                                   if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始

                                   else USART_RX_STA|=0x8000; //接收完成了

                                   }

                          else //还没收到0X0D

                                   {       

                                   if(Res==0x0d)USART_RX_STA|=0x4000;

                                   else

                                            {

                                            USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

                                            USART_RX_STA++;

                                            if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收  

                                            }               

                                   }

                          }              

     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值