赞
踩
如下图
所以,如果我们要使用上端的PA4,PA5去连接MCU的串口USART1的话,我们需要将跳线帽短接到右边。
需要将串口进行重定义到c的标准输入输出函数上,
在ht32f5xxxx_conf.h重修改宏定义即可:(可使用keil自带的文件向导打开,如下图:)
如上图:以USART1当做标准输入输出的串口(即可以使用printf直接进行输出)
有一点值得注意的是,使用重定义后的串口,可以直接在elink上输出串口信息,相当方便
与stm32配置时极其相似;无非就是使能时钟,配置串口初始化结构体,使能串口,如果需要的话,还需要使能中断及配置中断。
使能时钟;
CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
USART0_CKCU_COF(CKCUClock) = 1; //串口时钟
CKCUClock.Bit.USART0 = 1; //串口时钟
CKCUClock.Bit.AFIO = 1;//端口复用时钟
CKCU_PeripClockConfig(CKCUClock, ENABLE);//使能时钟
将RX设置为输入上拉模式:
GPIO_PullResistorConfig(GPIOPORT_USART0,GPIOPIN_USART0_RX, GPIO_PR_UP);
引脚复用(合泰几乎所有的引脚在使用时都需重映射,虽然有默认的功能,但建议使能复用,并将其确认清楚为好):
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 串口
配置初始化结构体
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初始化
使能中断(要使用中断的话)
NVIC_EnableIRQ(USART0_IRQn);//串口中断级使能
USART_IntConfig( HT_USART0, USART_INT_RXDR , ENABLE);
串口使能
USART_TxCmd(HT_USART0, ENABLE); //串口0Tx使能
USART_RxCmd(HT_USART0, ENABLE); //串口0Rx使能
关于串口中断的一些tips:
通常情况下,我们只使能接收中断,而不用发送中断,
因为当数据来时,我们通常不会马上进行处理,而是等待接收完成才进行处理,所以此时使用中断,可以使cpu在这段时间内去干其他事情;
而发送时,我们通常只有等发送完成才会去干其他事情,而且通常一次发送的数据量不会太大,也没有使用中断的必要。在使用发送中断时注意,我们只有在要发送时才开启中断,发送结束时必须关闭中断,否则,单片机检测到发送缓冲区为空(表明现在能发送)就会进入中断。如果我们一直将发送中断开启的话,我们没有发送/发送已经完成时,发送缓冲就是空的,此时就会不断进入中断中,从而对单片机的运行产生
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。