<dl id="xausj"></dl>
    1. <ul id="xausj"><th id="xausj"></th></ul>

      <b id="xausj"></b>
      <cite id="xausj"></cite>
      <b id="xausj"><meter id="xausj"></meter></b>
      <dl id="xausj"><noframes id="xausj"></noframes></dl>
    2. 您好,歡迎訪問上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁 ->  新聞資訊 -> 單片機(jī)

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

      文章出處:單片機(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時間:
      2018
      05-20

      請在MDK(keil)工程屬性的“Target“-》”Code Generation“中勾

      選”Use MicroLIB

       

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

      用Printf 函數(shù)

      紅色字句為重點(diǎn)?。。。。?/p>

      若使得在程序中使用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個函數(shù) usart配置 和 重定向 C庫的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 www.pendragonrpg.com All rights reserved   滬ICP備2021005866號

      国产中文欧美日韩,色播在线永久免费视频,另类专区亚洲无码,亚洲中文字无码av

      <dl id="xausj"></dl>
      1. <ul id="xausj"><th id="xausj"></th></ul>

        <b id="xausj"></b>
        <cite id="xausj"></cite>
        <b id="xausj"><meter id="xausj"></meter></b>
        <dl id="xausj"><noframes id="xausj"></noframes></dl>