STM32_F103的Usart_基础自学

让自己别忘了大学里学的东西,那么就把它记录下下来,效率会比忘记然后重新再去找资料再重头学高的多

关于串口的配置过程:

  1. 配置对应的引脚的状态模式
  2. 配置串口的参数
  3. –配置中断 (可有可无)
  4. 使能上述配置
  5. –配置中断服务函数 (可有可无)

关于串口的中断含义:

  1. USART_IT_RXNE 串口的接受端数据不空(满)
  2. USART_IT_TXE 串口的接受端数据空(不满)
#include <M_all.h> 
void M_Usart_Init(u32 BUFF)
{
    USART_InitTypeDef USART_InitStructure;                            

    NVIC_InitTypeDef NVIC_InitStructure;

    GPIO_Pin_States_Set(GPIOA,GPIO_Pin_9,GPIO_Mode_AF_PP);                              //配置引脚

    GPIO_Pin_States_Set(GPIOA,GPIO_Pin_10,GPIO_Mode_IN_FLOATING);                       //配置引脚

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO, ENABLE);          //开启时钟 AF+Usart


    USART_InitStructure.USART_BaudRate = BUFF;                                          //配置波特率 

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;                         //配置传输数据大小                

    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);                                           //确定配置         


    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;                                  //指定UART1中断                                

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;                           //配置中断优先级                

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                                     //配置中断子优先            

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                      //配置中断使能                       

  NVIC_Init(&NVIC_InitStructure);                                                    //确定配置


    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                                     //开启中断

  USART_Cmd(USART1, ENABLE);                                                         //开启串口 

}



void USART1_IRQHandler(void)
{
   if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)                               //等待接受端满
   {
        USART_SendData(USART1,USART_ReceiveData(USART1));                               //将电脑端发送的数据通过CH340打印回电脑处

        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);                       //等待发送完成
   }
}
/*---------------------解除下面的函数封印,并且在keil软件配置中勾选"MicroLib"并且让代码包含stdio.h头文件,即可调用printf函数--------*/
//int fputc(int ch, FILE *f)//重定向,让printf输出到串口
//{
//    USART_SendData(USART1,ch);

//    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
//    return ch;
//}

Printf函数调用操作

**

PS:关于AFIO的时钟开启 和引脚状态AF_pp..的关系

**
他们是这样的,对于引脚状态改成AF模式(AF_PP),是因为该引脚不再是普通的io口,而是外设的功能引脚口,所以要配置为AF模式。,

  1. 1.

对于引脚状态改成AF模式(AF_PP):

是因为该引脚不再是普通的io口,而是外设的功能引脚口,所以要配置为AF模式。

2.

而对于开启AFIO时钟:

是因为原来的这个引脚的外设功能通过Remap函数转移到其他的引脚上去了,或者这个引脚存在着中断,所以要去开启AFIO的复用时钟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值