740071911 发表于 2022-7-20 21:16

【CW32F030CxTx StartKit测评】通过板载串口打印信息

本帖最后由 740071911 于 2022-7-20 21:51 编辑

刚拿到板子的时候把玩过串口,然后时隔时隔20天,就忘记怎么用了,写个帖子作为备忘录还是很好的,还不占地方{:titter:}。
串口实验结果:
1:系统初始化时,打印系统时钟频率
2:串口定时打印信息


硬件连接:
(1)需要注意板载的串口模块CH340,并未与MCU的串口相连接,同时CH340的电源也需要自己选择。
看原理图,CN9排插线,VDDU,RX,TX都是悬空的,用板载串口模块时,需要用杜邦线与MCU的串口相连。

(2)板载串口模块CH340的电源VDDU的选择不同,J5跳帽的位置也要相应的变动,见手册CH340N有记录,

所以,这里也要有所注意。
实物连接:串口的GND与MCU的gnd是连接的,如果只打印信息,可以只用两根线,
VDDU--->VDD,PCRXD--->PB08即可。

代码实现:
/* UART.c *//******************************************************************************
* Include files
******************************************************************************/
#include "Uart.h"

/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/
//UARTx
#defineDEBUG_USARTx                   CW_UART1
#defineDEBUG_USART_BaudRate         9600
#defineDEBUG_USART_UclkFreq         64000000

//UARTx GPIO
#defineDEBUG_USART_GPIO_CLK         RCC_AHB_PERIPH_GPIOB
#defineDEBUG_USART_TX_GPIO_PORT       CW_GPIOB
#defineDEBUG_USART_TX_GPIO_PIN      GPIO_PIN_8
#defineDEBUG_USART_RX_GPIO_PORT       CW_GPIOB
#defineDEBUG_USART_RX_GPIO_PIN      GPIO_PIN_9

//GPIO AF
#defineDEBUG_USART_AFTX               PB08_AFx_UART1TXD()
#defineDEBUG_USART_AFRX               PB09_AFx_UART1RXD()
/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/

/******************************************************************************
* Local type definitions ('typedef')
******************************************************************************/

/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/


void MX_UART_Init(void)
{
    GPIO_InitTypeDef ioConfig;
    USART_InitTypeDef uartConfig;
   
    RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOB, ENABLE);
    RCC_APBPeriphClk_Enable2(RCC_APB2_PERIPH_UART1, ENABLE);
   
    //UART TX RX 复用
    #if 0
    DEBUG_USART_AFTX;
    DEBUG_USART_AFRX;
    #endif
    PB08_AFx_UART1TXD();
    PB09_AFx_UART1RXD();

    ioConfig.Pins = DEBUG_USART_TX_GPIO_PIN;
    ioConfig.Mode = GPIO_MODE_OUTPUT_PP;
    ioConfig.Speed = GPIO_SPEED_HIGH;
    GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &ioConfig);

    ioConfig.Pins = DEBUG_USART_RX_GPIO_PIN;
    ioConfig.Mode = GPIO_MODE_INPUT_PULLUP;
    GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &ioConfig);
   
    uartConfig.USART_BaudRate = DEBUG_USART_BaudRate;
    uartConfig.USART_Over = USART_Over_16;
    uartConfig.USART_Source = USART_Source_PCLK;
    uartConfig.USART_UclkFreq = DEBUG_USART_UclkFreq;
    uartConfig.USART_StartBit = USART_StartBit_FE;
    uartConfig.USART_StopBits = USART_StopBits_1;
    uartConfig.USART_Parity = USART_Parity_No ;
    uartConfig.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    uartConfig.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(DEBUG_USARTx, &uartConfig);
   
}



#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.
*
*/
PUTCHAR_PROTOTYPE
{
    USART_SendData_8bit(CW_UART1, (uint8_t)ch);

    while (USART_GetFlagStatus(CW_UART1, USART_FLAG_TXE) == RESET);

    return ch;
}




demo是在上一个工程基础上添加的,下面是系统时钟的获取打印

/**
*\*\name    PrintfClockInfo.
*\*\fun   Printf clock information.
*\*\param   none
*\*\returnnone
**/
void PrintfClockInfo(const char* msg)
{
    u32 nHclk_Freq;
    u32 nPclk_Freq;
   
    /* reinit after sysclk changed */
    MX_UART_Init();
   
    /* Wait for the configuration to succeed */
    Delay(0xFFFF);
   
    printf("--------------------------------\n");
    printf("%s:\n", msg);
   
    nHclk_Freq = RCC_Sysctrl_GetHClkFreq();
    nPclk_Freq = RCC_Sysctrl_GetPClkFreq();
   
    printf("SystemCoreClock: %d MHz\n", SystemCoreClock/1000000);
    printf("HCLK: %d MHz\n", nHclk_Freq/1000000);
    printf("PCLK: %d MHz\n", nPclk_Freq/1000000);

    /*
    --------------------------------
    clock acquisition, wait a minute...:
    */
}代码附件:
最后附上代码



zhaochunqing 发表于 2022-7-21 14:46

代码很详细,学习学习

janewood 发表于 2022-7-24 22:05

好像自带log这个函数吧   

sheflynn 发表于 2022-7-24 23:23

直接重映射printf就行。   

louliana 发表于 2022-8-18 18:27

自带的源代码有这个功能的。   

alvpeg 发表于 2022-8-20 16:36

使用printf函数吧。   

51xlf 发表于 2022-8-20 21:28

串口调试是首选方式。   

pixhw 发表于 2022-11-2 17:05

如何重新映射printf呢?            

janewood 发表于 2022-11-2 17:37

这个串口引脚是否支持5V的电平?

modesty3jonah 发表于 2022-11-2 17:58

这个CW32F030CxTx是否能配置1mhz的波特率呢

olivem55arlowe 发表于 2022-11-2 18:32

感觉串口连接都非常的复杂了呢。            
页: [1]
查看完整版本: 【CW32F030CxTx StartKit测评】通过板载串口打印信息