新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32 printf輸出到USART1

        stm32 printf輸出到USART1

        作者: 時間:2016-12-01 來源:網絡 收藏


        /************************頭文件*****************************************/

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

        #include"stm32f10x_lib.h"http://包含所有的頭文件
        #include

        /*******************************位綁定定義*****************************************/
        //#define GPIOA_ODR_A (GPIOA_BASE+0x0C)
        //#define GPIOA_IDR_A (GPIOA_BASE+0x08)
        //#define GPIOB_ODR_A (GPIOB_BASE+0x0C)
        //#define GPIOB_IDR_A (GPIOB_BASE+0x08)
        //#define GPIOC_ODR_A (GPIOC_BASE+0x0C)
        //#define GPIOC_IDR_A (GPIOC_BASE+0x08)
        //#define GPIOD_ODR_A (GPIOD_BASE+0x0C)
        //#define GPIOD_IDR_A (GPIOD_BASE+0x08)
        //#define GPIOE_ODR_A (GPIOE_BASE+0x0C)
        //#define GPIOE_IDR_A (GPIOE_BASE+0x08)
        //
        //#define BitBand(Addr,BitNum) *((volatile unsignedlong*)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))
        //
        //#define PAout(n) BitBand(GPIOA_ODR_A,n)
        //#define PAin(n) BitBand(GPIOA_IDR_A,n)
        //#define PBout(n) BitBand(GPIOB_ODR_A,n)
        //#define PBin(n) BitBand(GPIOB_IDR_A,n)
        //#define PCout(n) BitBand(GPIOC_ODR_A,n)
        //#define PCin(n) BitBand(GPIOC_IDR_A,n)
        //#define PDout(n) BitBand(GPIOD_ODR_A,n)
        //#define PDin(n) BitBand(GPIOD_IDR_A,n)
        //#define PEout(n) BitBand(GPIOE_ODR_A,n)
        //#define PEin(n) BitBand(GPIOE_IDR_A,n)


        /*******************************************************************************/
        /*函數名 : RCC_Configuration */
        /* 功能 : 初始化外部時鐘 */
        /* 輸入 : None */
        /* 輸出 : None */
        /* 返回 : None */
        /********************************************************************************/
        void RCC_Configuration(void)
        {
        //----------使用外部RC晶振-----------
        RCC_DeInit();//初始化為缺省值
        RCC_HSEConfig(RCC_HSE_ON);//使能外部的高速時鐘
        while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待外部高速時鐘使能就緒
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能預取指緩存
        FLASH_SetLatency(FLASH_Latency_2);//設置FLASH存儲器2延時周期
        RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB時鐘等于系統時鐘HCLK = SYSCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);//高速AHB時鐘(PCLK2)PCLK2 = HCLK
        RCC_PCLK1Config(RCC_HCLK_Div2);//低速AHB時鐘(PCLK1)PCLK1 = HCLK/2
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLLCLK = 8MHZ * 9 =72MHZ
        RCC_PLLCmd(ENABLE);//Enable PLLCLK
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//等待 PLLCLK 準備好
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//選擇 PLL 為系統時鐘
        while(RCC_GetSYSCLKSource()!=0x08);//等待系統使用PLL為系統時鐘
        //---------打開相應外設時鐘--------------------
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE );
        }


        /*******************************************************************************/
        /*函數名 : GPIO_Configuration */
        /* 功能 : 初始化GPIO外設 */
        /* 輸入 : None */
        /* 輸出 : None */
        /* 返回 : None */
        /*******************************************************************************/
        void GPIO_Configuration(void)
        {
        GPIO_InitTypeDefGPIO;

        GPIO.GPIO_Pin =GPIO_Pin_9;
        GPIO.GPIO_Speed =GPIO_Speed_50MHz;
        GPIO.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO);//端口初始化

        GPIO.GPIO_Pin =GPIO_Pin_10;

        GPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO);//端口初始化
        }

        /*******************************************************************************/
        /*函數名 : Delay_MS */
        /* 功能 : 軟件延時 */
        /* 輸入 : 1ms */
        /* 輸出 : None */
        /* 返回 : None */
        /*******************************************************************************/
        void Delay_MS(u16 dly)
        {
        u16 i,j;
        for(i=0;ifor(j=1000;j>0;j--);
        }


        void USART_Configuration(void)//初始化USART
        {USART_InitTypeDef USART_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;//發送接收使能
        USART_Init(USART1, &USART_InitStructure);//根據USART_InitStruct中指定的參數初始化外設USART1寄存器

        USART_Cmd(USART1,ENABLE);//開啟USART外設


        }
        /*******************************************************************************/
        /*函數名 : fputc */
        /* 功能 : 重定向printf輸出到USART1 */
        /* 輸入 : int ch 字符 FILE *f 文件指針 */
        /* 輸出 : ch */
        /* 返回 : ch */
        /********************************************************************************/


        int fputc(int ch,FILE *f)
        {
        //ch送給USART1
        USART_SendData(USART1, ch);
        //等待發送完畢
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET) {}
        //返回ch
        return(ch);
        }
        /*******************************************************************************/
        /* 函數名 : main */
        /* 功能 : 主函數 */
        /* 輸入 : None */
        /* 輸出 : None */
        /* 返回 : None */
        /*******************************************************************************/
        int main(void)
        {

        u8 i=58;
        RCC_Configuration();
        GPIO_Configuration();
        USART_Configuration();

        while(1)
        {

        printf("qq 2519286938");
        printf("i value is %d",i);
        printf("i value is %o",i);
        printf("i value is %d, %d",i+i,i*i);
        printf("-----------------------------");


        }

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宜兰县| 土默特左旗| 双城市| 娱乐| 达州市| 远安县| 木里| 湘潭市| 祥云县| 永和县| 卢湾区| 宁陵县| 洪雅县| 布拖县| 昆明市| 革吉县| 镇康县| 珠海市| 南阳市| 方正县| 大名县| 平凉市| 镇巴县| 沂水县| 兴安盟| 凯里市| 东丰县| 大化| 资兴市| 宁化县| 安多县| 来凤县| 吴堡县| 衡南县| 军事| 朝阳县| 永修县| 三门峡市| 资阳市| 特克斯县| 长海县|