打印
[其它]

HT32笔记3-UART&USART(2022/2/20)

[复制链接]
674|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangtaohui|  楼主 | 2023-2-25 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HT-UART库使用1.硬件连接
  • 如下图


​ 所以,如果我们要使用上端的PA4,PA5去连接MCU的串口USART1的话,我们需要将跳线帽短接到右边。


使用特权

评论回复
评论
wangtaohui 2023-2-25 15:34 回复TA
———————————————— 版权声明:本文为CSDN博主「点灯的棉羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_51915497/article/details/123030888 

相关帖子

沙发
wangtaohui|  楼主 | 2023-2-25 15:34 | 只看该作者
如果要使用c的标准库进行串口输入输出
需要将串口进行重定义到c的标准输入输出函数上,

在ht32f5xxxx_conf.h重修改宏定义即可:(可使用keil自带的文件向导打开,如下图:)


如上图:以USART1当做标准输入输出的串口(即可以使用printf直接进行输出)

有一点值得注意的是,使用重定义后的串口,可以直接在elink上输出串口信息,相当方便

使用特权

评论回复
板凳
wangtaohui|  楼主 | 2023-2-25 15:34 | 只看该作者
串口的初始化配置及使用
与stm32配置时极其相似;无非就是使能时钟,配置串口初始化结构体,使能串口,如果需要的话,还需要使能中断及配置中断。

使用特权

评论回复
地板
wangtaohui|  楼主 | 2023-2-25 15:36 | 只看该作者
使能时钟;
        CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
       
        USART0_CKCU_COF(CKCUClock) = 1; //串口时钟
        CKCUClock.Bit.USART0   = 1; //串口时钟
    CKCUClock.Bit.AFIO     = 1;//端口复用时钟
    CKCU_PeripClockConfig(CKCUClock, ENABLE);//使能时钟

使用特权

评论回复
5
wangtaohui|  楼主 | 2023-2-25 15:36 | 只看该作者
将RX设置为输入上拉模式:
        GPIO_PullResistorConfig(GPIOPORT_USART0,GPIOPIN_USART0_RX, GPIO_PR_UP);

使用特权

评论回复
6
wangtaohui|  楼主 | 2023-2-25 15:37 | 只看该作者
引脚复用(合泰几乎所有的引脚在使用时都需重映射,虽然有默认的功能,但建议使能复用,并将其确认清楚为好):
        AFIO_GPxConfig(AFIOPORT_USART0, AFIOPIN_USART0_TX, AFIO_FUN_USART_UART); //PA4 复用 TX 串口
    AFIO_GPxConfig(AFIOPORT_USART0, AFIOPIN_USART0_RX, AFIO_FUN_USART_UART); //PA5 复用 RX 串口

使用特权

评论回复
7
wangtaohui|  楼主 | 2023-2-25 15:37 | 只看该作者
配置初始化结构体
    USART_InitStructure.USART_BaudRate = BaudRate; //波特率
    USART_InitStructure.USART_WordLength = USART_WORDLENGTH_8B; //位长8位
    USART_InitStructure.USART_StopBits = USART_STOPBITS_1; //停止位1位
    USART_InitStructure.USART_Parity = USART_PARITY_NO; //不使用
    USART_InitStructure.USART_Mode = USART_MODE_NORMAL; //普通串口
    USART_Init(HT_USART0, &USART_InitStructure); //串口1初始化

使用特权

评论回复
8
wangtaohui|  楼主 | 2023-2-25 15:59 | 只看该作者
使能中断(要使用中断的话)
        NVIC_EnableIRQ(USART0_IRQn);//串口中断级使能
        USART_IntConfig( HT_USART0, USART_INT_RXDR , ENABLE);

使用特权

评论回复
9
wangtaohui|  楼主 | 2023-2-25 16:00 | 只看该作者
串口使能
    USART_TxCmd(HT_USART0, ENABLE); //串口0Tx使能
    USART_RxCmd(HT_USART0, ENABLE);        //串口0Rx使能

使用特权

评论回复
10
wangtaohui|  楼主 | 2023-2-25 16:01 | 只看该作者
关于串口中断的一些tips:

通常情况下,我们只使能接收中断,而不用发送中断,

因为当数据来时,我们通常不会马上进行处理,而是等待接收完成才进行处理,所以此时使用中断,可以使cpu在这段时间内去干其他事情;

使用特权

评论回复
11
wangtaohui|  楼主 | 2023-2-25 16:03 | 只看该作者
而发送时,我们通常只有等发送完成才会去干其他事情,而且通常一次发送的数据量不会太大,也没有使用中断的必要。在使用发送中断时注意,我们只有在要发送时才开启中断,发送结束时必须关闭中断,否则,单片机检测到发送缓冲区为空(表明现在能发送)就会进入中断。如果我们一直将发送中断开启的话,我们没有发送/发送已经完成时,发送缓冲就是空的,此时就会不断进入中断中,从而对单片机的运行产生

使用特权

评论回复
12
nomomy| | 2023-3-7 13:53 | 只看该作者
UART是普通的串口通信,USART是通用同步/异步串行通信。

使用特权

评论回复
13
wangdezhi| | 2023-3-7 14:08 | 只看该作者
UART串口通信支持多机通信,可以把很多块单片机通过UART接到一起,实现相互通信

使用特权

评论回复
14
iyoum| | 2023-3-7 19:37 | 只看该作者
UART与USART有区别么?

使用特权

评论回复
15
vivilyly| | 2023-3-7 19:49 | 只看该作者
HT32最多的 有多少个串口?              

使用特权

评论回复
16
lihuami| | 2023-3-7 21:08 | 只看该作者
ART和USART都是单片机上的通用串口   

使用特权

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

本版积分规则

43

主题

482

帖子

0

粉丝