1.创建好FreeRTOS代码,在User文件夹中添加printf-stdarg.c。并添加到工程中
2.重定向printf到串口,在usart.c中添加代码
- /* USER CODE BEGIN 0 */
- #include <stdio.h>
- #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__ */
- ///**
- // * @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 EVAL_COM1 and Loop until the end of transmission */
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
- return ch;
- }
- /* USER CODE END 0 */
复制代码
3.修改printf-stdarg.c
- /*
- #define putchar(c) c
- */
- static void printchar(char **str, int c)
- {
- extern int putchar(int c); //去掉原本的注释
-
- if (str) {
- **str = (char)c;
- ++(*str);
- }
- else
- {
- (void)putchar(c);
- }
- }
复制代码- /*修改printf为f_printf。sprintf,snprintf也是一样修改*/
- int f_printf(const char *format, ...)
- {
- va_list args;
- va_start( args, format );
- return print( 0, format, args );
- }
- int f_sprintf(char *out, const char *format, ...)
- {
- va_list args;
- va_start( args, format );
- return print( &out, format, args );
- }
- int f_snprintf( char *buf, unsigned int count, const char *format, ... )
- {
- va_list args;
- ( void ) count;
- va_start( args, format );
- return print( &buf, format, args );
- }
复制代码
4.修改main.c
- #include <stdio.h>
- extern int f_printf(const char *format, ...);
- /*
- *
- */
- int main()
- {
- /**/
- }
- static void LED1_Task(void* pvPrameters)
- {
- while(1)
- {
- temp_count++;
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
- /*串口输出字符*/
- f_printf("LED1_TASK running.");
- vTaskDelay(1000);
- }
- }
复制代码
|