串口通信+外部中断

    古人云大风起于青萍之末,释家亦说缘起,与博客的缘分至此而起,但愿一只无脚鸟也能似那鲲鹏扶摇九天而上。


   STM32篇

    昨天复习了串口通信和外部中断实验。对于串口通信实验,特别需要注意的是串口的数据寄存器USART_DR,这是一个双寄存器,包含TDR和RDR,当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。具体的参加32的参考手册。还有就是系统文件usart.c里正点原子的一段代码

 void USART1_IRQHandler(void)     
{
    u8 res; 
    #ifdef OS_CRITICAL_METHOD         
    OSIntEnter();   
    #endif
    if(USART1->SR&(1<<5))         //如果收到数据

    { 
        res=USART1->DR;
        if((USART_RX_STA&0x80)==0
        {
             if(USART_RX_STA&0x40)
             {
                 if(res!=0x0a)

                 {

                       USART_RX_STA=0;   //接收错误,重新开始

                 }
                  else

                {

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

                 }
            }
           else 
           { 
                 if(res==0x0d)
                 { 
                       USART_RX_STA|=0x4000;
                  }
                  else
                  {
                       USART_RX_BUF[USART_RX_STA&0X3F]=res;
                       USART_RX_STA++;
                       if(USART_RX_STA>(USART_REC_LEN-1))   //超过了最大接收字节数,接收错误,重新开始

                       USART_RX_STA=0;   
                   }  
            }
        }                  
}

这段代码中的USART_RX_STA为接收状态标记,是人为规定的寄存器,这段代码的执行顺序应该是从下往上,结合着正点原子的不完全手册很好理解了。(串口函数printf函数还是有点问题,串口调试助手上没有打印出来)


     对于外部中断实验需要学会调用两个函数

    1,void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM);为外部中断配置函数,对于19个外部中断/事件请求,该函数只针对GPIOA~G,不针对PVD,RTC和USB唤醒实验;参数BITx代表需要使能的位;TRIM代表

触发方式(低电平触发,高电平触发或任意电平触发)

   2,void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group) ;

该函数的四个参数分别为抢占优先级,响应优先级,中断号,中断分组;



c语言篇--数据的表现形式及其运算

基本上比较简单,只是有点小的知识点需要关注下,实际运用中尤其要注意数据的溢出问题。





你可能感兴趣的:(串口通信+外部中断)