STM32USART串口通信

问题描述:利用USART串口程序,实现PC与STM32通信,计算机发送数据,stm32接受后,再发送给PC端;


1.GPIO端口配置
     根据手册:PA.9为TX(发送),PA.10为RX(接受),因此:PA.9为复用推挽输出,PA.10为浮空输入,一行代码搞定:
                    
void GPIO_Config()
{
	 GPIOA->CRH=0X04B0;
}
2.配置USART相关寄存器
     STM32有3个USART,这里用usart1说明
  波特率:由SUART1->BRR控制
                        STM32USART串口通信_第1张图片
更正一下,上表错误:DIV_Mantissa[11:0]表示整数;DIV_Fraction[3:0]表示小数。
波特率的计算公式如下:
                           

这里选择时钟为72MHz;波特率为9600;可以得到:usartdiv=468.75;整数部分:468=0x1d4;小数部分:0.75=0xc;
所以在USART1->BRR=0X1D4C;即可设置波特率9600;
   然后是控制寄存器:USART->CR1;
                参照手册,现在只考虑最简单的形式(无中断):使能USART,使能读,使能写。
 
void USART_Config()
{
	USART1->BRR = 0x1D4C;
	USART1->CR1|=0X200C;
	
}
下面在有一个发送函数:
 
void send(uchar data)
{
      while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE));
          USART_SendData(USART1,data);
    Delay_us(100);
}
其中的延时函数可以不加;
然后就是main主函数:
 
int main()
{
	u8 temp=0;
   SysclkConfiguration();
	 GPIO_Config();
	 USART_Config();
	
	while(1)
	{
		   temp=USART1->SR&0X020;
       if(temp==0x020)
   {
           data=USART1->DR;
            send(data);
}
}
}
其中关于USART1->SR的操作是在检测单片机是否接受到数据;



                   

你可能感兴趣的:(STM32USART串口通信)