MM32F3273G8P火龙果开发板MindSDK开发教程2 - uart1重定向printf的使用

MM32F3273G8P火龙果开发板MindSDK开发教程2 - uart1重定向printf的使用

1、管脚配置

使用PB6 PB7作为串口打印的管脚。
而PB6 PB7连接到DAP-Link的虚拟串口上,所以直接用dap的虚拟串口查看mm32
的打印输出即可。
在这里插入图片描述
在这里插入图片描述

管脚配置代码如下:

static void BOARD_InitUartPins(void)
{
    /* Pb6 - UART1_TX. */
    GPIO_Init_Type gpio_init;
    gpio_init.Pins  = CONSOLE_TX_GPIO_PIN;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(CONSOLE_GPIO_PORT, &gpio_init);
    GPIO_PinAFConf(CONSOLE_GPIO_PORT, gpio_init.Pins, GPIO_AF_7);

    /* Pb7 - UART1_RX. */
    gpio_init.Pins  = CONSOLE_RX_GPIO_PIN;
    gpio_init.PinMode  = GPIO_PinMode_In_Floating;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(CONSOLE_GPIO_PORT, &gpio_init);
    GPIO_PinAFConf(CONSOLE_GPIO_PORT, gpio_init.Pins, GPIO_AF_7);
}

2、Uart1的配置

相关代码如下:

void BOARD_InitDebugConsole(void)
{
    UART_Init_Type uart_init;
	BOARD_InitUartPins();

    uart_init.ClockFreqHz   = CLOCK_APB2_FREQ;
    uart_init.BaudRate      = 115200U;
    uart_init.WordLength    = UART_WordLength_8b;
    uart_init.StopBits      = UART_StopBits_1;
    uart_init.Parity        = UART_Parity_None;
    uart_init.XferMode      = UART_XferMode_RxTx;
    uart_init.HwFlowControl = UART_HwFlowControl_None;
    uart_init.XferSignal    = UART_XferSignal_Normal;
    uart_init.EnableSwapTxRxXferSignal = false;
    UART_Init(BOARD_DEBUG_UART_PORT, &uart_init);
    UART_Enable(BOARD_DEBUG_UART_PORT, true);
}	

3、使能UART1以及GPIOB的时钟

   /* GPIOB. */
RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOB, true);
RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOB);

/* UART1. */
RCC_EnableAPB2Periphs(RCC_APB2_PERIPH_UART1, true);
RCC_ResetAPB2Periphs(RCC_APB2_PERIPH_UART1);

4、重定向printf

int fputc(int c, FILE *f)
{
    (void)(f);
    while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(UART1)) )
    {}
    UART_PutData(UART1, (uint8_t)(c));
    return c;
}

int fgetc(FILE *f)
{
    (void)(f);
    while ( 0u == (UART_STATUS_RX_DONE & UART_GetStatus(UART1)) )
    {}
    return UART_GetData(UART1);
}

5、头文件相关定义

#ifndef __UART_H__
#define __UART_H__


#define CONSOLE_TX_GPIO_PIN   	GPIO_PIN_6
#define CONSOLE_RX_GPIO_PIN		GPIO_PIN_7
#define CONSOLE_GPIO_PORT 		GPIOB

#define BOARD_DEBUG_UART_PORT	UART1


void BOARD_InitDebugConsole(void);
#endif //__UART_H__

6、main函数调用

int main(void)
{
	BOARD_InitBootClocks();  // ³õʼ»¯Ê±ÖÓ
	BOARD_InitDebugConsole();
	LED_Init();
	while(1)
	{
		LED_On();
		printf("led on\r\n");
		APP_Delay(1000);
		LED_Off();
		printf("led off\r\n");
		APP_Delay(1000);
	}	
}

7、现象

在这里插入图片描述

8、代码路径

https://gitee.com/xiaoguo-tec_0/mm32-f3273.git

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值