STM32F1x系列——串口通信

      一  在STM32F1x系列串口通信实验中,常用的寄存器有:

(1)USART_SR  状态寄存器   

(2)USART_DR  数据寄存器  

(3)USART_BRR  波特率寄存器  

(4) USART_CR   使能位

      二  串口操作相关的库函数(省略入口参数):

(1)void USART_Init() ;  //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能

(2)void USART_Cmd ;  //使能串口

(3)void USART_ITConfig() ;  //使能相关中断


(4)void USART_SendData() ;  //发送数据到串口,DR

(5)uint16_t USART_ReceiveData() ;  //接受数据,从DR读取接受到的数据


(6)FlagStatus USART_GetFlagStatus() ;  //获取状态标志位

(7)void USART_ClearFlag() ;  //清除状态标志位

(8)ITStatus USART_GetITStatus() ;  //获取中断状态标志位

(9)void USART_ClearITPendingBit() ;  //清除中断状态标志位

      三  串口配置的一般步骤:

(1)串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd() ;

(2)串口复位:USART_DeInit() ; 这一步不是必须的

(3)GPIO端口模式设置:GPIO_Init() ; 模式设置为GPIO_Mode_AF_PP

(4)串口参数初始化:USART_Init() ;

(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤):

          NVIC_Init() ;

          USART_ITConfig() ;

(6)使能串口:USART_Cmd() ;

(7)编写中断处理函数:USARTx_IRQHandler() ;

(8)串口数据的收发:

         void USART_SendData() ;   //发送数据到串口,DR

         uint16_t USART_ReceiveData() ;  //接受数据,从DR读取接受到的数据

(9)串口传输状态获取:

         FlagStatus USART_GetFlagStatus(RT_FLAUSART_TypeDef * USARTx , uint16_t USART_FLAG) ; 

         void USART_ClearITPendingBit(RT_FLAUSART_TypeDef * USARTx , uint16_t USART_IT) ;

      程序中的main.c文件 代码如下:

#include "stm32f10x.h"

 void My_USART1_Init()
 {
	    GPIO_InitTypeDef GPIO_InitStruct ;
	    USART_InitTypeDef USART_InitStruct ;
	    NVIC_InitTypeDef NVIC_InitStruct ;
	 
	    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE) ;   //GPIO时钟使能
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE) ;	//´串口时钟使能
	 
	    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP ;     //GPIO端口模式设置
	    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 ;
	    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz ;
	    GPIO_Init(GPIOA,&GPIO_InitStruct) ;
	    
	    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;     //GPIO端口模式设置
	    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 ;
	    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz ;
	    GPIO_Init(GPIOA,&GPIO_InitStruct) ;
	    
	    USART_InitStruct.USART_BaudRate = 115200 ;
	    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None ;
	    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx ;
	    USART_InitStruct.USART_Parity = USART_Parity_No ;
	    USART_InitStruct.USART_StopBits = USART_StopBits_1 ;
			USART_InitStruct.USART_WordLength = USART_WordLength_8b ;
	    USART_Init(USART1,&USART_InitStruct) ; 
			
			USART_Cmd(USART1,ENABLE) ;  //串口使能
			
			USART_ITConfig(USART1,USART_IT_RXNE,ENABLE) ;  //打开接收中断
			
			NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn ;
			NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
			NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;
			NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;
	
			NVIC_Init(&NVIC_InitStruct) ;
 }
 
 void USART1_IRQHandler(void)   //中断服务函数
 {
	    u8 res ;
	   if(USART_GetITStatus(USART1,USART_IT_RXNE))
		 {
			   res = USART_ReceiveData(USART1) ;
			   USART_SendData(USART1,res) ;
		 }
 }
 
 int main(void)
 {	
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //系统中断优先级分配为2
      My_USART1_Init() ;
      while(1) ;
 }

打开串口调试助手调试:


     成功运行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值