打印
[方案相关]

华大HC32F460USART收发实验

[复制链接]
4691|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.实验目标
       本实验主要通过对USART的配置及编程,使用查询的方式实现USART串口接收数据,同时将接收到的数据发送到USART。

2. 实验准备
        硬件搭建:ZW-HC32F460-BZ标准版开发板1套

        软件搭建:MDK5.22

3.硬件原理


       这里我们使用板载的USB转串口来实现功能。USB转串口对应MCU的USART1,引脚使用PA11(TX)、PA12(RX)。

       需要注意:原理图中PA11、PA12通过J31、J32进行跳线切换连接到UART或USB,这里我们跳到UART。


使用特权

评论回复
沙发
怎么总是重复啊|  楼主 | 2023-12-20 14:49 | 只看该作者
4.驱动代码
        为了简化编程,让用户快速上手,我公司针对USART驱动文件进行了深度优化编写,提供开源的Usart.c和Usart.h以供用户使用,现将源文件关键定义及函数做说明。

【USART定义】

       为了使用方便,在Usart.h中对USART使用的外部引脚及波特率进行了定义,用户无需配置勾选对应引脚或参数即可完成USART的配置。

使用特权

评论回复
板凳
怎么总是重复啊|  楼主 | 2023-12-20 14:50 | 只看该作者
  以USART1为例,分别地定义了RX和TX的端口、引脚以及波特率。

   关于USART其他参数的定义,在初始化函数中进行常规设置。

使用特权

评论回复
地板
怎么总是重复啊|  楼主 | 2023-12-20 14:50 | 只看该作者
【USART初始化】

        根据以上配置对USART进行初始化。

        函数原型:   void UsartInt( void )

        功能说明:   USART初始化

        输入参数:   无

        输出参数:   无

        特殊备注:   需配合Usart.h中的配置
void UsartInt( void )

{

    uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART1 | PWC_FCG1_PERIPH_USART2 | \ PWC_FCG1_PERIPH_USART3 | PWC_FCG1_PERIPH_USART4;

    const stc_usart_uart_init_t stcInitCfg = {

        UsartIntClkCkNoOutput,

        UsartClkDiv_1,

        UsartDataBits8,

        UsartDataLsbFirst,

        UsartOneStopBit,

        UsartParityNone,

        UsartSampleBit8,

        UsartStartBitFallEdge,

        UsartRtsEnable,

    };

    /* Enable peripheral clock */

    PWC_Fcg1PeriphClockCmd(u32Fcg1Periph, Enable);

#if (USART1_EN == 1 )

    /* Initialize USART IO */

    PORT_SetFunc( ( en_port_t )USART1_PORT, ( en_pin_t )RX1_PIN, Func_Usart1_Rx, Disable);

    PORT_SetFunc( ( en_port_t )USART1_PORT, ( en_pin_t )TX1_PIN, Func_Usart1_Tx, Disable);

    /* Initialize UART */

    USART_UART_Init(USART1, &stcInitCfg);

    /* Set baudrate */

    USART_SetBaudrate(USART1, USART1_BAUD);

    /*Enable RX && TX function*/

    USART_FuncCmd(USART1, UsartRx, Enable);

    USART_FuncCmd(USART1, UsartTx, Enable);

#endif

#if (USART2_EN == 1 )

………………………………………

#endif

#if (USART3_EN == 1 )

………………………………………

#endif

#if (USART4_EN == 1 )

………………………………………

#endif

}

使用特权

评论回复
5
怎么总是重复啊|  楼主 | 2023-12-20 14:50 | 只看该作者
   这里四个USART串口通信的基本参数配置为一致,也是最常用的模式

     UsartIntClkCkNoOutput:时钟为内部时钟不输出

        UsartClkDiv_1:1分频

        UsartDataBits8:8位数据位

        UsartDataLsbFirst:低位在前

        UsartOneStopBit:1位停止位

        UsartParityNone:无奇偶校验

        UsartSampleBit8:8位采样

        UsartStartBitFallEdge:起始位检测下降沿

        UsartRtsEnable:RTS允许

     以上只USART1完整代码,其他三个串口类似。

使用特权

评论回复
6
怎么总是重复啊|  楼主 | 2023-12-20 14:51 | 只看该作者
5. 主流程图

使用特权

评论回复
7
怎么总是重复啊|  楼主 | 2023-12-20 14:51 | 只看该作者
6.实验过程
【第一步:新建/配置工程】

       参见2.2.3节,将工程模板复制到实验目录下,将工程名改为EXINT。

       勾选FWLibCfg.h配置中的CLK_EN、EFM_EN、GPIO_EN、PWC_EN、SRAM_EN、UTILITY_EN、USART_EN选项

使用特权

评论回复
8
怎么总是重复啊|  楼主 | 2023-12-20 14:51 | 只看该作者
【第二步:添加USART模块驱动】

       将Usart.c和Usart.h复制到\实验10USART收发实验\Hardware\OnBoard路径下,同时将Usart.c添加到工程中Hardware/OnBoard下

使用特权

评论回复
9
怎么总是重复啊|  楼主 | 2023-12-20 14:51 | 只看该作者
【第三步:初始化编程】

        1)添加Usart头文件

             在main.c和Usart.c文件中添加 Usart.h头文件。

#include "Usart.h"

使用特权

评论回复
10
怎么总是重复啊|  楼主 | 2023-12-20 14:51 | 只看该作者
  2)配置USART

        打开Usart.h(一般将h文件添加到c文件并编译,即可在c文件下方显示出该h文件)文件,在下方选择 “Configuration Wizard”标签,即可出现配置界面。将Usart进行如下配置(与原理图引脚对应)。

使用特权

评论回复
11
怎么总是重复啊|  楼主 | 2023-12-20 14:52 | 只看该作者
备注:引脚定义与原理图一致;其他USART配置类似。

     3)USART初始化

       在主函数中调用USART初始化函数UsartInt()。

UsartInt();

使用特权

评论回复
12
怎么总是重复啊|  楼主 | 2023-12-20 14:52 | 只看该作者
【第四步:功能实现】

       按照主逻辑编写while(1)功能即可。

while (1)

{

       if (Set == USART_GetStatus(USART1, UsartRxNoEmpty))      

       {

              u8RxData = USART_RecData(USART1);

              while (Reset == USART_GetStatus(USART1, UsartTxEmpty))

              {

              }

              USART_SendData(USART1, u8RxData);            

       }

}

使用特权

评论回复
13
怎么总是重复啊|  楼主 | 2023-12-20 14:52 | 只看该作者
需要注意,这里在发送数据之前对USART发送是否为空进行了判断,保证上一次数据发送完成再发送下一次数据。

使用特权

评论回复
14
怎么总是重复啊|  楼主 | 2023-12-20 14:52 | 只看该作者
【第五步:结果验证】

      编译代码并下载至开发板运行程序,打开串口助手进行数据发送,串口数据接收到同样的数据。

使用特权

评论回复
15
怎么总是重复啊|  楼主 | 2023-12-20 14:52 | 只看该作者
7.实验扩展
       1)修改USART波特率为9600进行实验;

       2)使用开发板RS232公或RS232母进行实验。

使用特权

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

本版积分规则

21

主题

186

帖子

0

粉丝