打印
[开发工具]

HC32串口使用

[复制链接]
415|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
earlmax|  楼主 | 2024-9-27 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 串口GPIO配置

端口号和Pin脚号跟STM32没什么区别。

串口复用功能跟STM32大不一样。

如下图,选自HC32F448 表 2-1 引脚功能表。

1)每个管脚都有对应的管脚名称、中断号,以及功能号

2)调试口默认为TRACE/JTAG功能号,若要使能普通GPIO功能则要关闭调试功能

3)非调试口默认功能号为Func0,即普通GPIO功能。Func2到Func11为定时器或时钟功能,Func12为EXMC/TIMA功能

4)Func32~63为通用复用功能-分为两组,对于同一组的IO,可以配置为UART/I2C/SPI/CAN 4组功能,且Rx/Tx可以互换。而不是像STM32那样,每个IO的复用功能是固定的,对应通讯线必须一一选对。

如下,硬件选择了PB0和PA7作为串口通讯脚,可以在FG1任意选择一个可用串口使用。

#define USART_RX_PORT                   (GPIO_PORT_B)   /* PB0: USART2_RX */

2. 串口波特率配置
static void UartBaudConfig(void){        USART_FCG_ENABLE();        stc_usart_uart_init_t stcUartInit;        (void)USART_UART_StructInit(&stcUartInit);    stcUartInit.u32ClockDiv = USART_CLK_DIV64;    stcUartInit.u32CKOutput = USART_CK_OUTPUT_ENABLE;    stcUartInit.u32Baudrate = USART_BAUDRATE;    stcUartInit.u32OverSampleBit = USART_OVER_SAMPLE_8BIT;    USART_UART_Init(USART_UNIT, &stcUartInit, NULL);}


3. 串口接收超时配置

小华HC32F4串口支持的中断与STM32大有不同:

1)HC32 接收数据寄存器满中断,在收到1个字节时就会触发。等同于STM32的RXNE。名字不同

2)HC32 TIMEOUT中断,等同于STM32的空闲中断 IDLE 。HC32通过关联定时器直接配置超时时间,比STM32更加简便。

定时器Timer0被专门用来做串口的计时器,板子用的串口2,所以定时器要配置Timer0_1 B 。

//串口接收超时设置·关联定时器
#define USART_TIMEOUT_BITS              (5000U)#define TMR0_UNIT                       (CM_TMR0_1)

5. 串口初始化

LL_PERIPH_WE() 为打开相应寄存器的写使能

LL_PERIPH_WP() 为关闭相应寄存器的写使能

void UART_Init(void){    LL_PERIPH_WE(LL_PERIPH_ALL); 


6. 串口数据接收处理

USART_RxFull_IrqCallback 中断 只负责接收和缓存单字节数据,以及递增数据长度 (通过读数据清除标志位)

USART_RxTimeout_IrqCallback 中断 处理超时中断(超时中断触发后必须要关闭定时器,和清除标志位)

USART_RxError_IrqCallback 中断 处理异常错误

static void USART_RxFull_IrqCallback(void){ 

对于GPS、Wifi这类不频繁的数据交互,用到超时中断和接收寄存器满就可以处理数据了。

对于4G/蓝牙等有持续大量数据交互的模块,就需要用到DMA了。

7. 串口数据发送
static int32_t UartSendByte(CM_USART_TypeDef *UART, uint8_t ch){ 


8. DMA接收配置和处理

DMA配置方式与STM32基本相同:

1)设置DMA源地址和源地址增长类型,设置目的地址和目的地址增长类型

DMA接收属于串口数据寄存器到内存,即源地址固定,目的地址递增

DMA发送属于内存到串口数据寄存器,即源地址递增,目的地址固定

2)设置位宽、传输大小、传输块数


所不同的是,HC32有一个可配置的自动运行系统AOS。

可以配置AOS源和AOS目标.

AOS源可以是DMA传输完成、UART接收数据、定时器上溢和下溢、event电平变化等等。

AOS目标可以是DMA传输、定时器计数、ADC模数转换、event事件等等


如下是DMA初始化配置的参考代码,配置了串口DMA接收和串口DMA发送:

//DMA单元#define RX_DMA_UNIT                     (CM_DMA1)//DMA通道号·通道号越小优先级越高

如下是DMA接收处理代码:

1)USART_RxTimeout_IrqCallback

重启AOS系统

关闭串口超时定时器,清除串口超时标志位。

处理DMA接收数据。

2)RX_DMA_TC_IrqCallback

即接收完成中断

硬件上需要清除中断标志位

3)USART_TxComplete_IrqCallback

即串口发送完成中断

硬件上需要清除标志位,一般要失能发送中断

//串口接收超时中断

转自https://blog.csdn.net/weixin_38743772/article/details/133804695

使用特权

评论回复
沙发
wyde518| | 2024-9-28 13:04 | 只看该作者
这是为了积分吗,一点都不排版,看个寂寞

使用特权

评论回复
板凳
shenxiaolin| | 2024-9-29 10:06 | 只看该作者
应该使用代码上传的,不然看起来好乱

使用特权

评论回复
地板
eleg34ance| | 2024-10-28 20:42 | 只看该作者
串口使用其实使用例程就可以

使用特权

评论回复
5
nuan11nuan| | 2024-10-28 21:48 | 只看该作者
一般来说,串口通讯确实是比较常用的一种

使用特权

评论回复
6
pe66ak| | 2024-10-28 22:50 | 只看该作者
其实串口直接选择demo呗,demo的话会好很多啊

使用特权

评论回复
7
miltk| | 2024-10-28 23:51 | 只看该作者
这种串口的应用还带了DMA?

使用特权

评论回复
8
yuliangren| | 2024-10-29 08:27 | 只看该作者
我觉得小华的串口尤其是低功耗串口,非常好用

使用特权

评论回复
9
teaccch| | 2024-10-29 09:13 | 只看该作者
这种函数0是代表的什么意思?

使用特权

评论回复
10
gongqijuns| | 2024-10-29 10:13 | 只看该作者
感觉小华的灵活性比ST的强多了

使用特权

评论回复
11
canfeil| | 2024-10-29 11:25 | 只看该作者
看来小华这个是支持IO矩阵的啊?

使用特权

评论回复
12
星星点点didi| | 2024-10-29 14:15 | 只看该作者
串口波特率配置好像有点不理解,不过要是按照官方的例程来说,直接拿来就用,哈哈

使用特权

评论回复
13
nqty| | 2024-10-29 16:28 | 只看该作者
确实,不过串口通讯一般都是1个字节就触发的

使用特权

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

本版积分规则

43

主题

1410

帖子

1

粉丝