您好,歡迎訪問上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁(yè) ->  新聞資訊 -> 單片機(jī)

      ?STM32下Keil IDE中Printf函數(shù)的使用

      文章出處:?jiǎn)纹瑱C(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
      2018
      05-20

      請(qǐng)?jiān)贛DK(keil)工程屬性的“Target“-》”Code Generation“中勾

      選”Use MicroLIB

       

      前提是你有一個(gè)完整keil的工程 比如ADC的調(diào)試的時(shí)候很多時(shí)候用到串口 這里教你怎么樣使

      用Printf 函數(shù)

      紅色字句為重點(diǎn)?。。。?!

      若使得在程序中使用Printf需做一下幾步
      1,輸入輸出文件包含#include
      2,在程序下添加宏定義代碼

      /* Private function prototypes -----------------------------------------------*/

      #ifdef __GNUC__
               /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */
             #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
           #else
            #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
          #endif /* __GNUC__ */
       
         /* Private functions ---------------------------------------------------------*/

      3,添加如下2個(gè)函數(shù) usart配置 和 重定向 C庫(kù)的printf函數(shù)

       /* System Clocks Configuration */


      void RCC_Configuration(void)
      {    
        /* Enable GPIO clock */
        RCC_APB2PeriphClockCmd(USARTy_GPIO_CLK | USARTz_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);

      #ifndef USE_STM3210C_EVAL
        /* Enable USARTy Clock */
        RCC_APB2PeriphClockCmd(USARTy_CLK, ENABLE); 
      #else
        /* Enable USARTy Clock */
        RCC_APB1PeriphClockCmd(USARTy_CLK, ENABLE); 
      #endif
        /* Enable USARTz Clock */
        RCC_APB1PeriphClockCmd(USARTz_CLK, ENABLE);  
      }

      /* System Clocks Configuration */

       

      /* Configure the GPIO ports */

      void GPIO_Configuration(void)
      {
        GPIO_InitTypeDef GPIO_InitStructure;

      #ifdef USE_STM3210C_EVAL
        /* Enable the USART3 Pins Software Remapping */
        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
        
        /* Enable the USART2 Pins Software Remapping */
        GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);  
      #elif defined(USE_STM3210B_EVAL) || defined(USE_STM32100B_EVAL)
        /* Enable the USART2 Pins Software Remapping */
        GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
      #endif

        /* Configure USARTy Rx as input floating */
        GPIO_InitStructure.GPIO_Pin = USARTy_RxPin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);
        
        /* Configure USARTz Rx as input floating */
        GPIO_InitStructure.GPIO_Pin = USARTz_RxPin;
        GPIO_Init(USARTz_GPIO, &GPIO_InitStructure);  
        
        /* Configure USARTy Tx as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin = USARTy_TxPin;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);

        /* Configure USARTz Tx as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin = USARTz_TxPin;
        GPIO_Init(USARTz_GPIO, &GPIO_InitStructure); 
      }

      /* Configure the GPIO ports */

       

      /* USARTy configuration ------------------------------------------------------*/

      void USART_Configuration()
      {

      USART_InitTypeDef USART_InitStructure;
       USART_InitStructure.USART_BaudRate = 230400;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_Even;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        
        /* Configure USARTy */
        USART_Init(USARTy, &USART_InitStructure);
        /* Configure USARTz */
        USART_Init(USARTz, &USART_InitStructure);

      }

      /* USARTy configuration ------------------------------------------------------*/

       

      /*  Retargets the C library printf function to the USART.  */
      PUTCHAR_PROTOTYPE
      {
      USART_SendData(USART1, (uint8_t) ch);


      while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
      {}

      return ch;
      }

      /*  Retargets the C library printf function to the USART.  */

      3,然后就可以在main()調(diào)用

      printf("The is a example!" );

      printf("%s%c%c%c%c%c%s",
                 "#**",
                 Value/256,Value%6,
                '&',
                 Value_2/256,Value_2%6,
                "**%");

      之類的輸出函數(shù)


      上海意泓電子科技有限責(zé)任公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

      CopyRight 2020-2025 m.topsschool.com All rights reserved   滬ICP備2021005866號(hào)

      亚洲精品无码va人在线观看,少妇 逼小 水多,国产区免费av,国产精品无码观看

          欧美久久久久久又粗又大| 日韩AV无码专区国产乱码| 国产三级aⅴ在线播放| 四虎毛片| 无码中文字幕伊人| 亚欧国产日韩欧美在线观看| 中文字幕制服丝袜人妻动态| 国产乱子伦无码在线观看| 99re一区二区这里只有精品在线观看| 久操视频在线| 三级国产| 精品免费AV一区二区| 日韩精品一级无码毛片| 无码在线一区二区三区不卡| 一二三区亚州欧州无码中文维也纳| 欧美老妇交乱视频| 亚洲欧洲自拍偷线一区二区| 午夜在线视频一区二区三区| 天天爽天天爽夜夜爽国产自己精品| 国产xxxx色视频在线观看| 国产在线高清在线精品| 亚洲欧美精品综合一区| 亚州熟妇无码AV线播放| 中文字无码日韩欧毛| 久久精品国产动漫3d一区| 在线观看国产日韩亚洲中文字幕| 三级av| 久操伊人| 成人福利影院|