新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32串口中斷接收發送實驗

        stm32串口中斷接收發送實驗

        作者: 時間:2016-11-19 來源:網絡 收藏
        intmain()

        本文引用地址:http://www.104case.com/article/201611/318081.htm

        {

        u32i=0;

        /*芯片配置初始化----------------------------------------------------------*/

        RCC_Configuration();//復位和時鐘控制配置

        NVIC_Configuration();//嵌套中斷向量控制器配置

        GPIO_Configuration();//I/O配置

        USART_Configuration();//串口配置

        /*指示燈初始化------------------------------------------------------------*/

        GPIO_SetBits(GPIOA,GPIO_Pin_12);//熄滅LED1

        GPIO_SetBits(GPIOA,GPIO_Pin_15);//熄滅LED2

        while(1)

        {

        i++;

        if(500000==i)//LED1閃爍,表示正常。

        {

        GPIO_WriteBit(GPIOA,GPIO_Pin_12,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_12)));

        i=0;

        }

        }

        }

        /******************************************************************************************

        *函數名稱:RCC_Configuration

        *功能描述:

        *參數:

        *

        *返回值:

        *作者:

        *創建日期:2013年5月2日

        *全局變量

        *全局靜態變量:

        *局部靜態變量:

        ******************************************************************************************/

        voidRCC_Configuration(void)

        {

        /*RCCsystemreset(fordebugpurpose)*/

        RCC_DeInit();//RCC系統初始化,設為默認值

        /*EnableHSE*/

        RCC_HSEConfig(RCC_HSE_ON);//使能外部晶振(8MHz),關閉旁路

        /*WaittillHSEisready*/

        HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速時鐘穩定

        if(HSEStartUpStatus==SUCCESS)//時鐘就緒成功

        {

        /*EnablePrefetchBuffer*/

        /*AHB預分頻系數不為1時,必須置預取緩沖區處于開啟狀態

        應與閃存存儲器的訪問時間一起使用

        激活和禁止預取模式時應該在禁止快速時鐘時進行(關閉AHB的分頻器)*/

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//

        /*HCLK=SYSCLK*/

        RCC_HCLKConfig(RCC_SYSCLK_Div1);//SYSCLK不分頻,作為AHB時鐘(HCLK,閃存、SRAM等外設時鐘設置):36M

        /*PCLK2=HCLK*/

        RCC_PCLK2Config(RCC_HCLK_Div1);//AHBCLK不分頻,作為高速APB(APB2)時鐘(PCLK2):36M

        /*PCLK1=HCLK/2*/

        RCC_PCLK1Config(RCC_HCLK_Div1);//AHBCLK二分頻,作為低速APB(APB1)時鐘(PCLK1):36M

        /*ADCCLK=PCLK2/6*/

        RCC_ADCCLKConfig(RCC_PCLK2_Div6);//PCLK26分頻,作為ADC時鐘(ADCCLK):6M

        /*Flash2waitstate*/

        /*(SYSCLK)頻率與閃存訪問時間的關系:

        0等待周期,當0

        1等待周期,當24MHz

        2等待周期,當48MHz

        */

        FLASH_SetLatency(FLASH_Latency_1);//設置1個等待周期

        /*PLLCLK=8MHz/2*9=36MHz*/

        RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//外部時鐘2分頻后,9倍頻(PLL),得36MHz

        /*EnablePLL*/

        RCC_PLLCmd(ENABLE);//使能PLL電路

        /*WaittillPLLisready*/

        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//等待PLL電路就緒

        {

        }

        /*SelectPLLassystemclocksource*/

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//選擇PLL倍頻時鐘作為系統時鐘(SYSCLK):36MHz

        /*WaittillPLLisusedassystemclocksource*/

        while(RCC_GetSYSCLKSource()!=0x08)//等待PLL切換成系統時鐘源

        {

        }

        /*SelectHSEassystemclocksource*/

        //RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//選擇外部晶振作為系統時鐘源(SYSCLK)

        /*WaittillHSEisusedassystemclocksource*/

        //while(RCC_GetSYSCLKSource()!=0x04)//等待HSE切換成系統時鐘源,并作為輸出時鐘(該時鐘可能會有毛刺,僅作調試)

        //{

        //}

        }

        /*GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、AFIO時鐘使能*/

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC

        |RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO,ENABLE);

        /*USART3Periphclockenable*/

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//USART3時鐘使能(APB2)

        }

        /******************************************************************************************

        *函數名稱:NVIC_Configuraion

        *功能描述:

        *參數:

        *

        *返回值:

        *作者:

        *創建日期:2013年5月2日

        *全局變量:

        *全局靜態變量:

        *局部靜態變量:

        ******************************************************************************************/

        voidNVIC_Configuration(void)

        {

        NVIC_InitTypeDefNVIC_InitStructure;

        #ifdefVECT_TAB_RAM

        /*SettheVectorTablebaselocationat0x20000000*/

        NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//RAM

        #else/*VECT_TAB_FLASH*/

        /*SettheVectorTablebaselocationat0x08000000*/

        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//FLASH

        #endif

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//選擇第2組為優先級分組方式:高2位指定搶占優先級,低2位指定響應優先級

        /*enablinginterrupt*/

        NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQChannel;//USART中斷

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//占先級為0級,最高

        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應級最高0

        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//啟動中斷

        NVIC_Init(&NVIC_InitStructure);//初始化嵌套向量中斷控制器

        }

        /******************************************************************************************

        *函數名稱:GPIO_Configuration

        *功能描述:

        *參數:

        *

        *返回值:

        *作者:

        *創建日期:2013年5月2日

        *全局變量:

        *全局靜態變量:

        *局部靜態變量:

        ******************************************************************************************/

        voidGPIO_Configuration(void)

        {

        GPIO_InitTypeDefGPIO_InitStructure;

        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//關掉JTAG,釋放PA15,PB3,PB4

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_15;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOA,&GPIO_InitStructure);

        /*ConfigureUSART3Tx(PB.10)asalternatefunctionpush-pull*/

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOB,&GPIO_InitStructure);

        /*ConfigureUSART3Rx(PB.11)asinputfloating*/

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

        GPIO_Init(GPIOB,&GPIO_InitStructure);//RX初始化

        }

        /******************************************************************************************

        *函數名稱:GPIO_Configuration

        *功能描述:

        *參數:

        *

        *返回值:

        *作者:

        *創建日期:2013年5月2日

        *全局變量:

        *全局靜態變量:

        *局部靜態變量:

        ******************************************************************************************/

        voidUSART_Configuration(void)

        {

        USART_InitTypeDefUSART_InitStructure;

        USART_InitStructure.USART_BaudRate=9600;//波特率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;//串口發送和接收模式

        /*ConfigureUSART3basicandasynchronousparamters*/

        USART_Init(USART3,&USART_InitStructure);//串口初始化

        /*EnableUSART3*/

        USART_Cmd(USART3,ENABLE);//指令打開

        /*EnablesCOMtransmitinterrupt*/

        USART_ITConfig(USART3,USART_IT_TC,ENABLE);//發送中斷打開

        /*EnablesCOMreceiveinterrupt*/

        USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//接收中斷打開

        }

        voidDelay(vu32nCount)

        {

        for(;nCount!=0;nCount--);

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 同仁县| 多伦县| 綦江县| 东城区| 湾仔区| 东兰县| 伽师县| 乌兰察布市| 怀宁县| 玉环县| 卫辉市| 开封县| 岑溪市| 无为县| 定襄县| 河曲县| 日喀则市| 大城县| 新竹市| 云浮市| 广丰县| 沽源县| 留坝县| 鹤岗市| 温宿县| 竹山县| 江源县| 上林县| 图片| 望城县| 布尔津县| 南昌县| 贵南县| 南汇区| 古蔺县| 麟游县| 独山县| 青铜峡市| 屏边| 永登县| 巧家县|