387|0

410

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【ACM32G103RCT6开发板测评】+ 串口printf [复制链接]

  本帖最后由 TL-LED 于 2024-1-12 15:44 编辑

测试串口打印功能。

 

一、硬件部分

 

板卡上的仿真器带有虚拟串口,连接到ACM32G103的串口2接口

 

二、程序部分

2.1、hal_uart.c

这部分程序在SDK驱动程序中已经对串口的接口进行定义,不需要程序再重新定义

/******************************************************************************
*[url=home.php?mod=space&uid=159083]@brief[/url]  : Initialize the UART MSP: CLK, GPIO, NVIC
*         
*@param : huart: uart handle with UART parameters.
*@return: None
******************************************************************************/
__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    /* 
      NOTE: This function should be modified, when the callback is needed,
      the HAL_UART_MspInit can be implemented in the user file.
    */

    /* For Example */
    GPIO_InitTypeDef    GPIO_Uart = {0};
    
    if (huart->Instance == UART1) 
    {
        /* Enable Clock */
        __HAL_RCC_UART1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
        /* A9:Tx  A10:Rx */
        GPIO_Uart.Pin       = GPIO_PIN_9 | GPIO_PIN_10;
        GPIO_Uart.Mode      = GPIO_MODE_AF_PP;
        GPIO_Uart.Pull      = GPIO_PULLUP;
        GPIO_Uart.Drive     = GPIO_DRIVE_LEVEL3;
        GPIO_Uart.Alternate = GPIO_FUNCTION_1;
        
        HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        
        if (huart->Init.HwFlowCtl & UART_HWCONTROL_CTS) 
        {
            /* A11:CTS */
            GPIO_Uart.Pin = GPIO_PIN_11;
            
            HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        }

        if (huart->Init.HwFlowCtl & UART_HWCONTROL_RTS) 
        {
            /* A12:RTS */
            GPIO_Uart.Pin = GPIO_PIN_12;
            
            HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        }
        /* NVIC Config */
        NVIC_ClearPendingIRQ(UART1_IRQn);
        NVIC_SetPriority(UART1_IRQn, 5);
        NVIC_EnableIRQ(UART1_IRQn);
    }
    else if (huart->Instance == UART2) 
    {
        /* Enable Clock */
        __HAL_RCC_UART2_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
        /* A2:Tx  A3:Rx */
        GPIO_Uart.Pin       = GPIO_PIN_2 | GPIO_PIN_3;
        GPIO_Uart.Mode      = GPIO_MODE_AF_PP;
        GPIO_Uart.Pull      = GPIO_PULLUP;
        GPIO_Uart.Drive     = GPIO_DRIVE_LEVEL3;
        GPIO_Uart.Alternate = GPIO_FUNCTION_1;
        
        HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        
        if (huart->Init.HwFlowCtl & UART_HWCONTROL_CTS) 
        {
            /* A0:CTS */
            GPIO_Uart.Pin = GPIO_PIN_0;
            
            HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        }

        if (huart->Init.HwFlowCtl & UART_HWCONTROL_RTS) 
        {
            /* A1:RTS */
            GPIO_Uart.Pin = GPIO_PIN_1;
            
            HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        }
        /* NVIC Config */
        NVIC_ClearPendingIRQ(UART2_IRQn);
        NVIC_SetPriority(UART2_IRQn, 5);
        NVIC_EnableIRQ(UART2_IRQn);
    }
    else if(huart->Instance == UART3)
    {
        /* Enable Clock */
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_UART3_CLK_ENABLE();
        /* B10:Tx  B11:Rx */
        GPIO_Uart.Pin       = GPIO_PIN_10 | GPIO_PIN_11;
        GPIO_Uart.Mode      = GPIO_MODE_AF_PP;
        GPIO_Uart.Pull      = GPIO_PULLUP;
        GPIO_Uart.Drive     = GPIO_DRIVE_LEVEL3;
        GPIO_Uart.Alternate = GPIO_FUNCTION_1;
        
        HAL_GPIO_Init(GPIOB, &GPIO_Uart);
        
        if (huart->Init.HwFlowCtl & UART_HWCONTROL_CTS) 
        {
            /* B13:CTS */
            GPIO_Uart.Pin = GPIO_PIN_13;
            GPIO_Uart.Alternate = GPIO_FUNCTION_0;
            HAL_GPIO_Init(GPIOB, &GPIO_Uart);
        }

        if (huart->Init.HwFlowCtl & UART_HWCONTROL_RTS) 
        {
            /* B14:RTS */
            GPIO_Uart.Pin = GPIO_PIN_14;
            GPIO_Uart.Alternate = GPIO_FUNCTION_0;
            HAL_GPIO_Init(GPIOB, &GPIO_Uart);
        }
        /* NVIC Config */
        NVIC_ClearPendingIRQ(UART3_IRQn);
        NVIC_SetPriority(UART3_IRQn, 5);
        NVIC_EnableIRQ(UART3_IRQn);
    }
    else if(huart->Instance == UART4)
    {
        /* Enable Clock */
        __HAL_RCC_GPIOA_CLK_ENABLE();
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_UART4_CLK_ENABLE();
        /* A0:Tx  A1:Rx */
        GPIO_Uart.Pin       = GPIO_PIN_0 | GPIO_PIN_1;
        GPIO_Uart.Mode      = GPIO_MODE_AF_PP;
        GPIO_Uart.Pull      = GPIO_PULLUP;
        GPIO_Uart.Drive = GPIO_DRIVE_LEVEL3;
        GPIO_Uart.Alternate = GPIO_FUNCTION_3;
        
        HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        
        if (huart->Init.HwFlowCtl & UART_HWCONTROL_CTS) 
        {
            /* B7:CTS */
            GPIO_Uart.Pin = GPIO_PIN_7;
            GPIO_Uart.Alternate = GPIO_FUNCTION_4;
            HAL_GPIO_Init(GPIOB, &GPIO_Uart);
        }

        if (huart->Init.HwFlowCtl & UART_HWCONTROL_RTS) 
        {
            /* A15:RTS */
            GPIO_Uart.Pin = GPIO_PIN_15;
            GPIO_Uart.Alternate = GPIO_FUNCTION_3;
            HAL_GPIO_Init(GPIOA, &GPIO_Uart);
        }
        /* NVIC Config */
        NVIC_ClearPendingIRQ(UART4_IRQn);
        NVIC_SetPriority(UART4_IRQn, 5);
        NVIC_EnableIRQ(UART4_IRQn);
    }
}

 

2.3、usart.c

初始化串口2

#include "main.h"

UART_HandleTypeDef uart2_handle;


void usart_init(uint32_t baudrate)
{
	uart2_handle.Instance        = UART2;
	uart2_handle.Init.BaudRate   = baudrate;
	uart2_handle.Init.WordLength = UART_WORDLENGTH_8B;
	uart2_handle.Init.StopBits   = UART_STOPBITS_1;
	uart2_handle.Init.Parity     = UART_PARITY_NONE;
	uart2_handle.Init.Mode       = UART_MODE_TX_RX;
	uart2_handle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;

	HAL_UART_Init(&uart2_handle);

	HAL_UART_SetDebugUart(uart2_handle.Instance);

}

 

2.4、main.c

主程序

#include "main.h" 

int main(void)
{
	HAL_Init();  
	SystemClock_Config();    
	init_led();
	usart_init(115200);
	while(1)
	{
		HAL_Delay(500);
		led1_tog();
		printf("https://bbs.eeworld.com.cn/\r\n");
	}
}

2.5、软件配置

 

三、运行结果

 

下载程序,复位开发板后,串口输出

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表