<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32+Keil 中使用printf函數(shù)

          STM32+Keil 中使用printf函數(shù)

          作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
          Keil不支持Host-semi機(jī)制,即不支持直接在IDE打印字符串。

          那么只能通過(guò)程序向硬件串口發(fā)數(shù)據(jù)了,這樣調(diào)用的時(shí)候用自定義的函數(shù)即可,也很方便,例如:

          本文引用地址:http://www.ex-cimer.com/article/201611/315555.htm

          void send_char_to_usart(unsigned char c){}

          但是可否直接使用printf函數(shù)呢?畢竟人家都做好了,我們給他定一個(gè)打印輸出的接口就可以了,答案是肯定的,看ST的官方源碼:

          /**
          ******************************************************************************
          * @file Lib_DEBUG/Lib_DEBUG_Example/main.c
          * @author MCD Application Team
          * @version V1.1.1
          * @date 13-April-2012
          * @brief Main program body
          ******************************************************************************
          * @attention
          *
          *

          ? COPYRIGHT 2012 STMicroelectronics


          *
          * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
          * You may not use this file except in compliance with the License.
          * You may obtain a copy of the License at:
          *
          * http://www.st.com/software_license_agreement_liberty_v2
          *
          * Unless required by applicable law or agreed to in writing, software
          * distributed under the License is distributed on an "AS IS" BASIS,
          * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
          * See the License for the specific language governing permissions and
          * limitations under the License.
          *
          ******************************************************************************
          */
          /* Includes ------------------------------------------------------------------*/
          #include "stm32l1xx.h"
          #include "stm32l1xx_ip_dbg.h"
          #include
          #ifdef USE_STM32L152D_EVAL
          #include "stm32l152d_eval.h"
          #else
          #include "stm32l152_eval.h"
          #endif
          /** @addtogroup STM32L1xx_StdPeriph_Examples
          * @{
          */
          /** @addtogroup Lib_DEBUG_Example
          * @{
          */
          /* Private typedef -----------------------------------------------------------*/
          /* Private define ------------------------------------------------------------*/
          /* Private macro -------------------------------------------------------------*/
          /* Private variables ---------------------------------------------------------*/
          USART_InitTypeDef USART_InitStructure;
          /* 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 ---------------------------------------------------------*/
          /**
          * @brief Main program
          * @param None
          * @retval None
          */
          int main(void)
          {
          /*!< At this stage the microcontroller clock setting is already configured,
          this is done through SystemInit() function which is called from startup
          file (startup_stm32l1xx_xx.s) before to branch to application main.
          To reconfigure the default setting of SystemInit() function, refer to
          system_stm32l1xx.c file
          */
          GPIO_InitTypeDef GPIOA_InitStructure;
          /* USARTx configured as follow:
          - BaudRate = 115200 baud
          - Word Length = 8 Bits
          - One Stop Bit
          - No parity
          - Hardware flow control disabled (RTS and CTS signals)
          - Receive and transmit enabled
          */
          USART_InitStructure.USART_BaudRate = 115200;
          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;
          STM_EVAL_COMInit(COM1, &USART_InitStructure);
          /* Initialize all peripherals pointers */
          IP_Debug();
          printf("rn STM32l1xx Firmware Library compiled with FULL ASSERT function... nr");
          printf("...Run-time checking enabled nr");
          /* Simulate wrong parameter passed to library function ---------------------*/
          /* To enable SPI1 clock, RCC_APB2PeriphClockCmd function must be used and
          not RCC_APB1PeriphClockCmd */
          RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
          /* Some member of GPIOA_InitStructure structure are not initialized */
          GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_6;
          GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
          /*GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;*/
          GPIOA_InitStructure.GPIO_OType = GPIO_OType_PP;
          GPIOA_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
          GPIO_Init(GPIOA, &GPIOA_InitStructure);
          while (1)
          {
          }
          }
          #ifdef USE_FULL_ASSERT
          /**
          * @brief Reports the name of the source file and the source line number
          * where the assert_param error has occurred.
          * @param file: pointer to the source file name
          * @param line: assert_param error line source number
          * @retval None
          */
          void assert_failed(uint8_t* file, uint32_t line)
          {
          /* User can add his own implementation to report the file name and line number */
          printf("nr Wrong parameter value detected onrn");
          printf(" file %srn", file);
          printf(" line %drn", line);
          /* Infinite loop */
          /* while (1)
          {
          } */
          }
          #endif
          /**
          * @brief Retargets the C library printf function to the USART.
          * @param None
          * @retval None
          */
          PUTCHAR_PROTOTYPE
          {
          /* Place your implementation of fputc here */
          /* e.g. write a character to the USART */
          USART_SendData(EVAL_COM1, (uint8_t) ch);
          /* Loop until the end of transmission */
          while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
          {
          }
          return ch;
          }
          /**
          * @}
          */
          /**
          * @}
          */
          /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/



          關(guān)鍵詞: STM32Keilprintf函

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();