串口UART模式中断收发数据——华大HC32F460

本文介绍了基于HC32F460微控制器的USART串口初始化过程,包括时钟配置、宏定义、引脚映射和中断设置。代码示例展示了如何通过中断方式收发数据,特别提到了接收超时定时器的配置。此外,还讨论了波特率设置的一个潜在问题及其解决方法。

目录

一、基础知识

二、代码实现

宏定义

串口初始化

定时器初始化

时钟初始化

相关中断回调函数

mian函数

三、问题

1.有个坑

四、结果


一、基础知识

USART1基地址为:0x4001_D000

USART2基地址为:0x4001_D400

USART3基地址为:0x4002_1000

USART4基地址为:0x4002_1400

引脚映射:华大HC32F460与STM32F10x的区别在于:HC32F460有64个引脚支持Fun32~63功能选择,即我们说的重映射,Fun32~63主要为串行通信功能(包含USART,SPI, I2C, I2S, CAN);分为了Fun_Grp1、Fun_Grp2。具体可看<数据手册-引脚功能表>。而STM32F10x的GPIO引脚重映射是有规定的,所以华大的用起来比较灵活。

接收超时定时器通道选择
TIMEOUT 计数器采用Timer0 模块的计数器,具体对应关系如下:
USART1:Timer0 Unit1 A 通道
USART2:Timer0 Unit1 B 通道
USART3:Timer0 Unit2 A 通道
USART4:Timer0 Unit2 B 通道

USART串口通信的基本参数配置为一致,也是最常用的模式

UsartIntClkCkOutput:时钟为内部时钟输出

UsartClkDiv_16:16分频

UsartDataBits8:8位数据位

UsartDataLsbFirst:低位在前

UsartOneStopBit:1位停止位

UsartParityNone:无奇偶校验

UsartSamleBit8:8位采样

UsartStartBitFallEdge:起始位检测下降沿

UsartRtsEnable:RTS允许

二、代码实现

本样例主要展示USART外设配置为USART外设配置为UART模式时通过中断方式收发数据。

串口助手软件配置端口参数:

波特率:115200

数据位:8

校验位:None

停止位:1

宏定义

/* USART channel definition */
#define USART_CH                         (M4_USART4)
/* USART baudrate definition */
#define USART_BAUDRATE                  (115200ul)
/* USART Interrupt Number */
#define USART_RX_IRQn                   (Int000_IRQn)
#define USART_ERR_IRQn                  (Int001_IRQn)
#define USART_RTO_IRQn                  (Int002_IRQn)
#define USART_TX_IRQn                   (Int003_IRQn)
#define USART_CMP_IRQn                  (Int004_IRQn)
/* USART RX Port/Pin definition */
#define USART_RX_PORT                   (PortE)
#define USART_RX_PIN                    (Pin14)
#define USART_RX_FUNC                   (Func_Usart4_Rx)

#define USART_TX_PORT                   (PortE)
#define USART_TX_PIN                    (Pin15)
#define USART_TX_FUNC                   (Func_Usart4_Tx)

/* USART interrupt number  */
#define USART_RI_NUM                    (INT_USART4_RI)
#define USART_EI_NUM                    (INT_USART4_EI)
#define USART_RTO_NUM                   (INT_USART4_RTO)
#define USART_TI_NUM                    (INT_USART4_TI)
#define USART_TCI_NUM                   (INT_USART4_TCI)


#define set                              Ok
#define reset                            Error

#define ENCODER_LEN      6

static uint16_t u16RxData;

串口初始化

/*串口初始化*/
void UART_Init(void)
{
    en_result_t enRet = Ok;
    stc_irq_regi_conf_t stcIrqRegiCfg;
    
    /*配置串口使用的时钟和基本通信配置*/
    const stc_usart_uart_init_t stcInitCfg = {
        UsartIntClkCkOutput,
        UsartClkDiv_16,//时钟分频
        UsartDataBits8,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值