[其它] HT32笔记3-UART&USART(2022/2/20)

[复制链接]
1201|16
 楼主| wangtaohui 发表于 2023-2-25 15:29 | 显示全部楼层 |阅读模式
HT-UART库使用1.硬件连接
  • 如下图


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


评论

———————————————— 版权声明:本文为CSDN博主「点灯的棉羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_51915497/article/details/123030888  发表于 2023-2-25 15:34
 楼主| 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 | 显示全部楼层
使能时钟;
  1.         CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  2.        
  3.         USART0_CKCU_COF(CKCUClock) = 1; //串口时钟
  4.         CKCUClock.Bit.USART0   = 1; //串口时钟
  5.     CKCUClock.Bit.AFIO     = 1;//端口复用时钟
  6.     CKCU_PeripClockConfig(CKCUClock, ENABLE);//使能时钟
 楼主| wangtaohui 发表于 2023-2-25 15:36 | 显示全部楼层
将RX设置为输入上拉模式:
        GPIO_PullResistorConfig(GPIOPORT_USART0,GPIOPIN_USART0_RX, GPIO_PR_UP);
 楼主| wangtaohui 发表于 2023-2-25 15:37 | 显示全部楼层
引脚复用(合泰几乎所有的引脚在使用时都需重映射,虽然有默认的功能,但建议使能复用,并将其确认清楚为好):
  1.         AFIO_GPxConfig(AFIOPORT_USART0, AFIOPIN_USART0_TX, AFIO_FUN_USART_UART); //PA4 复用 TX 串口
  2.     AFIO_GPxConfig(AFIOPORT_USART0, AFIOPIN_USART0_RX, AFIO_FUN_USART_UART); //PA5 复用 RX 串口
 楼主| wangtaohui 发表于 2023-2-25 15:37 | 显示全部楼层
配置初始化结构体
  1.     USART_InitStructure.USART_BaudRate = BaudRate; //波特率
  2.     USART_InitStructure.USART_WordLength = USART_WORDLENGTH_8B; //位长8位
  3.     USART_InitStructure.USART_StopBits = USART_STOPBITS_1; //停止位1位
  4.     USART_InitStructure.USART_Parity = USART_PARITY_NO; //不使用
  5.     USART_InitStructure.USART_Mode = USART_MODE_NORMAL; //普通串口
  6.     USART_Init(HT_USART0, &USART_InitStructure); //串口1初始化
 楼主| wangtaohui 发表于 2023-2-25 15:59 | 显示全部楼层
使能中断(要使用中断的话)
  1.         NVIC_EnableIRQ(USART0_IRQn);//串口中断级使能
  2.         USART_IntConfig( HT_USART0, USART_INT_RXDR , ENABLE);
 楼主| wangtaohui 发表于 2023-2-25 16:00 | 显示全部楼层
串口使能
  1.     USART_TxCmd(HT_USART0, ENABLE); //串口0Tx使能
  2.     USART_RxCmd(HT_USART0, ENABLE);        //串口0Rx使能
 楼主| wangtaohui 发表于 2023-2-25 16:01 | 显示全部楼层
关于串口中断的一些tips:

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

因为当数据来时,我们通常不会马上进行处理,而是等待接收完成才进行处理,所以此时使用中断,可以使cpu在这段时间内去干其他事情;
 楼主| wangtaohui 发表于 2023-2-25 16:03 | 显示全部楼层
而发送时,我们通常只有等发送完成才会去干其他事情,而且通常一次发送的数据量不会太大,也没有使用中断的必要。在使用发送中断时注意,我们只有在要发送时才开启中断,发送结束时必须关闭中断,否则,单片机检测到发送缓冲区为空(表明现在能发送)就会进入中断。如果我们一直将发送中断开启的话,我们没有发送/发送已经完成时,发送缓冲就是空的,此时就会不断进入中断中,从而对单片机的运行产生
nomomy 发表于 2023-3-7 13:53 | 显示全部楼层
UART是普通的串口通信,USART是通用同步/异步串行通信。
wangdezhi 发表于 2023-3-7 14:08 | 显示全部楼层
UART串口通信支持多机通信,可以把很多块单片机通过UART接到一起,实现相互通信
iyoum 发表于 2023-3-7 19:37 | 显示全部楼层
UART与USART有区别么?
vivilyly 发表于 2023-3-7 19:49 | 显示全部楼层
HT32最多的 有多少个串口?              
lihuami 发表于 2023-3-7 21:08 | 显示全部楼层
ART和USART都是单片机上的通用串口   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

529

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部