华大HC32F460USART收发实验
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。
4.驱动代码
为了简化编程,让用户快速上手,我公司针对USART驱动文件进行了深度优化编写,提供开源的Usart.c和Usart.h以供用户使用,现将源文件关键定义及函数做说明。
【USART定义】
为了使用方便,在Usart.h中对USART使用的外部引脚及波特率进行了定义,用户无需配置勾选对应引脚或参数即可完成USART的配置。
以USART1为例,分别地定义了RX和TX的端口、引脚以及波特率。
关于USART其他参数的定义,在初始化函数中进行常规设置。 【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
} 这里四个USART串口通信的基本参数配置为一致,也是最常用的模式
UsartIntClkCkNoOutput:时钟为内部时钟不输出
UsartClkDiv_1:1分频
UsartDataBits8:8位数据位
UsartDataLsbFirst:低位在前
UsartOneStopBit:1位停止位
UsartParityNone:无奇偶校验
UsartSampleBit8:8位采样
UsartStartBitFallEdge:起始位检测下降沿
UsartRtsEnable:RTS允许
以上只USART1完整代码,其他三个串口类似。
5. 主流程图
6.实验过程
【第一步:新建/配置工程】
参见2.2.3节,将工程模板复制到实验目录下,将工程名改为EXINT。
勾选FWLibCfg.h配置中的CLK_EN、EFM_EN、GPIO_EN、PWC_EN、SRAM_EN、UTILITY_EN、USART_EN选项
【第二步:添加USART模块驱动】
将Usart.c和Usart.h复制到\实验10USART收发实验\Hardware\OnBoard路径下,同时将Usart.c添加到工程中Hardware/OnBoard下
【第三步:初始化编程】
1)添加Usart头文件
在main.c和Usart.c文件中添加 Usart.h头文件。
#include "Usart.h" 2)配置USART
打开Usart.h(一般将h文件添加到c文件并编译,即可在c文件下方显示出该h文件)文件,在下方选择 “Configuration Wizard”标签,即可出现配置界面。将Usart进行如下配置(与原理图引脚对应)。
备注:引脚定义与原理图一致;其他USART配置类似。
3)USART初始化
在主函数中调用USART初始化函数UsartInt()。
UsartInt(); 【第四步:功能实现】
按照主逻辑编写while(1)功能即可。
while (1)
{
if (Set == USART_GetStatus(USART1, UsartRxNoEmpty))
{
u8RxData = USART_RecData(USART1);
while (Reset == USART_GetStatus(USART1, UsartTxEmpty))
{
}
USART_SendData(USART1, u8RxData);
}
} 需要注意,这里在发送数据之前对USART发送是否为空进行了判断,保证上一次数据发送完成再发送下一次数据。 【第五步:结果验证】
编译代码并下载至开发板运行程序,打开串口助手进行数据发送,串口数据接收到同样的数据。
7.实验扩展
1)修改USART波特率为9600进行实验;
2)使用开发板RS232公或RS232母进行实验。
页:
[1]