打印
[开发工具]

【华大测评】三、USART

[复制链接]
1088|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      本次实验在开发板上建立串口通信,方便其它实验。实验中选择了开发板上已经具备的“USB-UART”端口(J1),直接使用一根Micro数据线与电脑连接,通过串口助手软件就能与PC建立通信。

一、实验资源
1、HC32F460-EVB;
2、Keil V5.28;
3、ST-LINK调试器;
4、Type-A to Micro数据线

二、资源简介

      HC32F460PETB具备4个通道的UART端口,支持全双工同、异步通信,支持智能卡接口  (ISO/IEC7816-3),支持调制解调器操作以及多处理器通信。UART与USART在做异步通信时两者没有什么区别,但USART在做同步通信时能够提供主动时钟,例如在智能卡 (ISO/IEC7816-3)通信中的应用,本次实验只是做异步通信。





      在串口通信中有几个比较重要的参数需要事前约定,如通信速率、数据位宽、停止位位数、有无校验等。通信速率与串口工作的时钟频率有着密切的关系。HC32F460支持多种时钟工作





      “波特率生成器提供小数波特率模式和整数波特率模式。整数波特率模式误差较大时,可采用小数波特率模式来降低波特率计算误差 ”这种灵活的波特率设置可以保证将通信误差降至最低水平。


上述文档对于波特率设置讲解非常详细,对于这一参数的理解有很大的帮助。

三、代码实现
      下面是实验中用到的资源:



      实验的代码按照DEMO中轮询通讯例程进行修改:
void USART_Config(void)
{
        en_result_t enRet = Ok;
        uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART3;
        const stc_usart_uart_init_t stcInitCfg =
        {
                UsartIntClkCkNoOutput,
                UsartClkDiv_1,
                UsartDataBits8,
                UsartDataLsbFirst,
                UsartOneStopBit,
                UsartParityNone,
                UsartSamleBit8,
                UsartStartBitFallEdge,
                UsartRtsEnable,
        };

        /* Enable peripheral clock */
        PWC_Fcg1PeriphClockCmd(u32Fcg1Periph, Enable);

        /* Initialize USART IO */
        PORT_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_FUNC, Disable);
        PORT_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_FUNC, Disable);

        /* Initialize UART */
        enRet = USART_UART_Init(USART_CH, &stcInitCfg);
        if (enRet != Ok)
        {
                while (1)
                {
                }
        }

        /* Set baudrate */
        enRet = USART_SetBaudrate(USART_CH, USART_BAUDRATE);
        if (enRet != Ok)
        {
                while (1)
                {
                }
        }

        /*Enable RX && TX function*/
        USART_FuncCmd(USART_CH, UsartRx, Enable);
        USART_FuncCmd(USART_CH, UsartTx, Enable);
}

void Usart_Rx_Tx(void)
{
        uint16_t u16RxData;
        if (Set == USART_GetStatus(USART_CH, UsartRxNoEmpty))         /* Warit Rx data register no empty */
        {
                u16RxData = USART_RecData(USART_CH);
                while (Reset == USART_GetStatus(USART_CH, UsartTxEmpty));  /* Warit Tx data register empty */
                USART_SendData(USART_CH, u16RxData);
        }
        UsartRxErrProcess();
}

int32_t main(void)
{
        int8_t get_sys_clk;
       
        /* Initialize Clock */
        ClkInit();
        USART_Config();
        get_sys_clk = CLK_GetSysClkSource();
        printf("\r\n sys_clk = %d ",get_sys_clk);
        printf("\r\n HC32F460PETB USART TEST IS OK!");
        while (1)
    {
        Usart_Rx_Tx();
    }
}


四、实验结果


五、实验总结
      通过USART3通信实验对HC32F460PETB串口的使用有了初步认识,并为后面的其他一些实验提供了方便。

使用特权

评论回复
沙发
gaoyang9992006| | 2020-7-31 08:54 | 只看该作者
ST-LINK调试器?
意思是这个开发板没有烧录器吗,还是厂家送的是ST-LINK,或者是兼容ST-LINK。
ST-LINK我还是有的。

使用特权

评论回复
板凳
lisingch|  楼主 | 2020-7-31 10:53 | 只看该作者
gaoyang9992006 发表于 2020-7-31 08:54
ST-LINK调试器?
意思是这个开发板没有烧录器吗,还是厂家送的是ST-LINK,或者是兼容ST-LINK。
ST-LINK我还 ...

板子上没有集成调试器,但有JTAG和SWD接口,J-LINK和ST-LINK都可以用,J-LINK太占地方所以就用了ST-LINK做调试器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14984

帖子

17

粉丝