关于STM32 HAL 的初始化工作 printf重定向以及微秒延时
话不多说,直接上代码
有两种方式,第一种是经典重定向,需要引入微库,一次只能对一个串口进行重定向
#include <stdio.h>
#if 1
uint8_t ch_r;
int fputc(int c, FILE *f)
{
uint8_t ch;
ch = c;
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000);
return c;
}
int fgetc(FILE * F)
{
HAL_UART_Receive(&huart1,&ch_r,1,0xffff);//接收
return ch_r;
}
#endif
void HAL_Delay_us(uint32_t nus)
{
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
HAL_Delay(nus-1);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
}
第二种,比较灵活,并且不用引入微库,使用当前并没有遇到什么致命问题
uint8_t u_buf[256];
#include <stdio.h>
#include <string.h>
#define printf(...) HAL_UART_Transmit(&huart1, (uint8_t *)u_buf, sprintf((char*)u_buf, __VA_ARGS__), 0xffff)
extern uint8_t u_buf[256];
void HAL_Delay_us(uint32_t nus)
{
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
HAL_Delay(nus-1);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
}