打印
[STM32F4]

【STM32F411RENucleo】- printf函数重定义

[复制链接]
4688|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 dawei360 于 2015-2-8 12:09 编辑

串口的学习中printf函数的重定义是必须的,方便使用各种参数!
在STM32F4Nucleo 板子中,利用STM32F4cube进行开发简单方便,下面来解释小怎么结合CUBE软件小改动程序来实现我们想要的功能。
cubemx 中设置:

#include "UartPrintf.h"


UART_HandleTypeDef huart2;

void HAL_MspInit(void)
{
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
  GPIO_InitTypeDef GPIO_InitStruct;
  if(huart->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspInit 0 */

  /* USER CODE END USART2_MspInit 0 */
    /* Peripheral clock enable */
    __USART2_CLK_ENABLE();
  
    /**USART2 GPIO Configuration   
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN USART2_MspInit 1 */

  /* USER CODE END USART2_MspInit 1 */
  }

}

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{

  if(huart->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspDeInit 0 */

  /* USER CODE END USART2_MspDeInit 0 */
    /* Peripheral clock disable */
    __USART2_CLK_DISABLE();
  
    /**USART2 GPIO Configuration   
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
  }

}

void MX_GPIO_Init(void)
{
  /*时钟初始化*/
  __GPIOA_CLK_ENABLE();
}


void MX_USART2_UART_Init(void)
{
  /*初始化串口2*/  
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart2);

}

/*串口重定义*/
int fputc(int ch, FILE *f)
{        
       uint8_t mych[1];
        mych[0]=(uint8_t)ch;
                while (HAL_UART_GetState(&huart2) == RESET);
                HAL_UART_Transmit(&huart2, mych, 1,10);
                return ch;
}


int fgetc(FILE *f)
{
    uint8_t mych[1];
    while (HAL_UART_GetState(&huart2) == RESET);
    HAL_UART_Receive(&huart2, mych,1,10);
    while (HAL_UART_GetState(&huart2) == RESET);
    HAL_UART_Transmit(&huart2, mych, 1,10);
    return mych[0];
}


void UartPrintfInit(void)
{
    MX_GPIO_Init();
    MX_USART2_UART_Init();
   
}

沙发
dirtwillfly| | 2015-2-8 08:49 | 只看该作者
感谢分享

使用特权

评论回复
板凳
nucleo的接口跳线  要调整吗   不得看不了printf输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

736

帖子

5

粉丝