STM32
直播中

刘静

7年用户 1269经验值
私信 关注
[问答]

请问一下STM32是如何去实现串口printf函数打印的呢

请问一下STM32是如何去实现串口printf函数打印的呢?有哪些基本步骤?

回帖(1)

余煌木

2021-11-30 10:47:28
一、串口设置

1. 异步模式






2. 参数






3. 只是作为发送,则可以不开中断






4. 生成代码如下


/* USART6 init function */
static void MX_USART6_UART_Init(void)
{


  huart6.Instance = USART6;
  huart6.Init.BaudRate = 115200;
  huart6.Init.WordLength = UART_WORDLENGTH_8B;
  huart6.Init.StopBits = UART_STOPBITS_1;
  huart6.Init.Parity = UART_PARITY_NONE;
  huart6.Init.Mode = UART_MODE_TX_RX;
  huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart6.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart6) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }


}

5. 自己需添加

int fputc(int ch, FILE *f)
{
        unsigned char dat;
       
        dat = (unsigned char)ch;
        HAL_UART_Transmit(&huart6,(uint8_t *)(&dat),1,5);
        return ch;
}
6. 自己封装发送函数


void logd(const char *p, uint8_t length)
{
        HAL_UART_Transmit(&huart6,(uint8_t *)p,length,500);
}
void logs(const char *p)
{
        HAL_UART_Transmit(&huart6,(uint8_t *)p,strlen(p),500);
}

500是超时时间,根据发送时间而定
二、测试

printf("logs function test!rn");
printf("目录:%srn",filePath);
printf("文件:%s/%srn",path,fname);
logs("logs function test!rn");
logd((const char *)music_name, 30);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分