1.国民技术N32G45X例程之-串口打印

国民技术N32G45X例程之-串口打印
提示:use MicroLIB,printf串口打印


前言

提示:国民技术N32G45X官方库默认都是选择use MicroLIB,当取消勾选use MicroLIB后,程序不能正常运行,主要的问题还是在串口打印printf函数上,KEIL在编译时没有找到printf函数支持的库。


提示:以下是本篇文章正文内容,下面案例可供参考

一、国民技术N32G45X串口配置

示例:配置USART1。

/**
 * @brief  Configure parameters of usart port.
 */
void Uart1_Init(void)
{
    GPIO_InitType GPIO_InitStructure;
    USART_InitType USART_InitStructure;
    
    // Turn on the clock of usart port GPIO
    USART_GPIO_APBxClkCmd(USART_GPIO_CLK, ENABLE);

    // Turn on the clock of usart peripheral
    USART_APBxClkCmd(USART_CLK, ENABLE);

    // Configure GPIO of USART TX as push pull multiplexing mode
    GPIO_InitStructure.Pin              = USART_TX_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode        = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed       = GPIO_Speed_50MHz;
    GPIO_InitPeripheral(USART_TX_GPIO_PORT, &GPIO_InitStructure);

    // Configure GPIO of USART RX as floating input mode
    GPIO_InitStructure.Pin              = USART_RX_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode        = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed       = GPIO_INPUT;
    GPIO_InitPeripheral(USART_RX_GPIO_PORT, &GPIO_InitStructure);

    // Configure parameters of usart port
    // Configure baud rate
    USART_InitStructure.BaudRate = USART_BAUDRATE;
    // Configure the length of frame data
    USART_InitStructure.WordLength = USART_WL_8B;
    // Configure stop bits
    USART_InitStructure.StopBits = USART_STPB_1;
    // Configure check bit
    USART_InitStructure.Parity = USART_PE_NO;
    // Configure hardware flow control
    USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
    // Configure working mode, send and receive together
    USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
    // Complete initialization configuration of usart port
    USART_Init(USARTx, &USART_InitStructure);

    // Configuration interrupt priority of the usart port
//    NVIC_Configuration();

    // Enable usart port receive interrupt
    //  USART_ConfigInt(DEBUG_USARTx, USART_INT_RXDNE, ENABLE);

    // Enable usart
    USART_Enable(USARTx, ENABLE);
}

二、printf函数

1.国民技术N32G45X官方库默认勾选use MicroLIB,所以代码中没有printf函数支持库。

代码如下(示例):

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE* f)
{
    USART_SendData(USARTx, (uint8_t)ch);
    while (USART_GetFlagStatus(USARTx, USART_FLAG_TXDE) == RESET)
        ;

    return (ch);
}

2.改成加入printf函数支持库,这样才能正常运行。

代码如下(示例):

//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
#if 1

#pragma import(__use_no_semihosting) 
	
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 
}; 

FILE __stdout; 

//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 

//重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
	/* 发送一个字节数据到串口 */
	USART_SendData(USARTx, (uint8_t) ch);
		
	/* 等待发送完毕 */
	while (USART_GetFlagStatus(USARTx, USART_FLAG_TXDE) == RESET);		
	
	return (ch);
}

///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
	/* 等待串口输入数据 */
	while (USART_GetFlagStatus(USARTx, USART_FLAG_TXDE) == RESET);

	return (int)USART_ReceiveData(USARTx);
}
#endif

3.在KEIL中取消勾选use MicroLIB

在这里插入图片描述


三、 例程下载

国民技术N32G45X例程之-串口打印
https://download.csdn.net/download/suqingxiao/68829874

版权声明:本文为CSDN博主「suqingxiao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/suqingxiao/article/details/122090474

生成海报
点赞 0

suqingxiao

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

趣聊51之串口通信(概念篇)

对于刚刚接触单片机的同学们来说,串口通信似乎是一个神秘感十足的东西,笔者在刚刚开始学习51单片机时,读的是郭天祥先生的那本著名的《新概念51单片机教程》,贼厚的一本书,但是等

8522A+7段数码管显示实验

1、8255A简介 8255A是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,