<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        基于stm32rbt6 頭文件f10x.h串口中斷例程

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年04月25日   【字體:

         希望一次就可以調通。

        代碼如下
        頭文件
        #include "stm32f10x.h"
        #include "stm32_eval.h"
        #include "stm32f10x_it.h"
        #include
        void RCC_Configuration(void);
        void NVIC_Configuration(void);
        void USART_Config(void);
        unsigned char USART1_ReceiveChar(void);//接收一個字符
        char tmpvv=0;
        char rbuff[100];
        配置函數
        void RCC_Configuration(void)
        {
        ErrorStatus HSEStartUpStatus;
         
            RCC_ClocksTypeDef RccClocks;    
         
          RCC_DeInit();
          RCC_HSEConfig(RCC_HSE_ON);
          HSEStartUpStatus = RCC_WaitForHSEStartUp();
         
          if(HSEStartUpStatus == SUCCESS)  
          {   
               
            RCC_HCLKConfig(RCC_SYSCLK_Div1); 
               
           
            RCC_PCLK2Config(RCC_HCLK_Div1); 
                 
           
            RCC_PCLK1Config(RCC_HCLK_Div2);  
           
               
            FLASH_SetLatency(FLASH_Latency_2);  
           
               
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  
           
               
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  
           
               
            RCC_PLLCmd(ENABLE);
               
           
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
           
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
         
           
            while(RCC_GetSYSCLKSource() != 0x08);  
          }
            
             
            RCC_GetClocksFreq(&RccClocks);  
          
            
         
         
        }                      
         
        void USART_Config(void)
        {
             GPIO_InitTypeDef GPIO_InitStructure; //io口初始化聲明
             USART_InitTypeDef USART_InitStructure; //串口初始化聲明
        USART_ClockInitTypeDef  USART_ClockInitStructure;    //定義USART時鐘初始化結構體聲明
             
             RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
           
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
            GPIO_Init(GPIOA, &GPIO_InitStructure);
         
           
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
            GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
            GPIO_Init(GPIOA, &GPIO_InitStructure);
        //包括所有串口的配置
        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
        //提升USART時鐘時使能還是失能,鐘低電平活動
        USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
        //指定SLCK引腳上時鐘的極性
        USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
        //時鐘第二個邊緣進行數據捕獲
        USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
        //在SCLK引腳上輸出最后發送的那個數據字的脈沖不從SCLK輸出
        USART_ClockInit(USART1, &USART_ClockInitStructure);
            //USART工作在異步模式下 包括所有串口
            USART_InitStructure.USART_BaudRate = 9600;//波特率
            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);//初始化串口1  可以在這打開串口2
            USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打開串口1的接收中斷
           // USART_ITConfig(USART1,USART_IT_TXE,ENABLE);  //打開串口1的發送中斷
           
            USART_Cmd(USART1, ENABLE); //打開串口1中斷
            
        }
        uint8_t uart_putchar(uint8_t ch)
        {
          
            
                
                    USART_SendData(USART1, (uint8_t) ch);
                    while (!(USART1->SR & USART_FLAG_TXE));
                   
                  
        }
         uint32_t uart_send( uint8_t *pdata, uint16_t length)
        {
        while(length--)
            {
                uart_putchar(*pdata++);
            }
             
        return length;
        }
         
        void  NVIC_Configuration(void)
        {
        NVIC_InitTypeDef  NVIC_InitStructure;
        #ifdef  VECT_TAB_RAM  
         
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
        #else  
         
        NVIC_SetVectorTable(NVIC_VectTab_FLASH+ 0x4000 , 0x4000);   
        #endif
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置優先級組為第1組(搶占式優先級有1位,副優先級有3位)
        //配置USART中斷
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//中斷通道為RTC全局中斷
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//搶占優先級為1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//副優先級為0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中斷通道使能
        NVIC_Init(&NVIC_InitStructure);//初始化NVIC結構?
        }
        main函數如下
        int main(void)
        {
         uint16_t uid[]={0};
           
         
          RCC_Configuration();
          
               
         
          NVIC_Configuration();
          USART_Config();
         
         
          
          while (1)
          {
         
            
          // uart_send(rbuff,5); 
          }
          
         
        }
        中斷函數在it.c中添加
        #include "stm32f10x_it.h"
        extern void USART1_Putc(char c);//輸出一個字符
        extern unsigned char USART1_ReceiveChar(void);//接收一個字符
        extern char rbuff[100];
        extern char tmpvv;
         
         
        void USART1_IRQHandler(void)
        {
          if ( USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)//查詢是否為秒中斷標志
          {
            char i=0,j;
            char t=0x00;
         
        USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清中斷標識
         
             tmpvv= USART_ReceiveData(USART1);
        USART_SendData(USART1,t);
          // USART_SendData(USART1,tmp );
         
        //  rbuff[i++] = USART_ReceiveData(USART1);  //全局變量
          
           
          }
          
        }
         
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮