STM32
直播中

duke刘

9年用户 705经验值
擅长:可编程逻辑
私信 关注
[问答]

分享一个不错的stm32串口通信实验

分享一个不错的STM32串口通信实验

回帖(1)

王登菊

2021-12-3 14:19:30
  基础概念
同步:在时钟信号下进行信息的传输,比如在每个时钟的上升沿进行一次传输。
异步:不用与时钟一起传输,但若想传输成功,传送方与接收方必须约定好传送速度——波特率。
单工:单方向传输,传送方(A)与接收方(B)固定,信息只能由A到B。
双工:双向传输,可同时接收、发送。即A既可以是传送方也可以是接收方,且A可以在接收的同时发送信息。
半双工:双向传输,但不可以同时接收、发送信息。
奇偶校验:传送的一组二进制数中1的个数为奇数,即为奇校验;1的个数为偶数,即为偶校验。
本次实验采用的是异步 双工 无校验的模式。
  串口初始化

void uart_init(u32 pclk2,u32 bound)//设pclk2为72,bound为9600
{           
        float temp;
        u16 mantissa;
        u16 fraction;          
        temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
        mantissa=temp;                                 //得到整数部分
        fraction=(temp-mantissa)*16; //得到小数部分         
    mantissa<<=4;
        mantissa+=fraction;
        RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
        RCC->APB2ENR|=1<<14;  //使能串口时钟
        GPIOA->CRH&=0XFFFFF00F;//IO状态设置
        GPIOA->CRH|=0X000008B0;//IO状态设置
        RCC->APB2RSTR|=1<<14;   //复位串口1
        RCC->APB2RSTR&=~(1<<14);//停止复位                     
        //波特率设置
        USART1->BRR=mantissa; // 波特率设置         
        USART1->CR1|=0X200C;  //1位停止,无校验位.(接收使能、发送使能、uart使能、禁止检验)
#if EN_USART1_RX                  //如果使能了接收
        //使能接收中断
        USART1->CR1|=1<<5;    //接收缓冲区非空中断使能                   
        MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级
#endif
}
主要功能:设置串口传输的波特率。
步骤简介:计算波特率、配置GPIO口、复位串口、配置传输约定、开启中断。
  计算波特率
说是计算波特率,但其实是计算一个跟波特率一一对应的数值,将这个数值赋值给BRR寄存器,这样,我们调用函数时只需要输入想要配置的波特率即可。计算公式:

  

  

这是手册中给出的USARTDIV(即BRR的值)的计算公式,算出USARTDIV后将它放入BRR中

  

  

整数部分放在[15:4],小数部分放在[3:0],这里在计算小数部分时给真实的小数乘了16,比如USARTDIV为25.62,则实际存入[3:0]的数为16*0.62 = 9.92,最接近的整数是:10 = 0x0A,所以最终存入BRR[15:4]的为25,存入[3:0]的为10。
  使能时钟和GPIO口设置没什么好说的,我的开发板上,接收端(RXD)为PA9、发送端(TXD)为PA10。
复位串口也是非必要的。
  配置传输约定
这步比较重要

  

  


  

  

2、3位设置发送、接收使能。

  

  

13位使能串口,12位设置字长。

  

  

10位禁止校验。

  

  

5位接收缓冲区非空中断使能,即串口接收到输入时会产生中断。
这段配置对应代码
USART1->CR1|=0X200C
USART1->CR1|=1<<5
  MY_NVIC_Init(3,3,USART1_IRQn,2);这是配置中断优先级和分组的操作,不理解的话参考定时器中断和中断优先级简介
到这里,串口通信的设置就结束了,具体接收到数据后要如何操作,就看你在中断函数里面如何设置了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分