赞
踩
HT32(32位合泰单片机,以下简称HT32)
● 通用同步异步收发器 – USART
● 同时支持异步和时钟同步串行通信模式
● 异步工作频率高达 (fPCLK/16) MHz,同步工作频率高达 (fPCLK/8) MHz
● 全双工通信
● 完全可编程串行接口通信特性包括:
字长:7,8 或 9-bit 字符
校验位:奇、偶或无奇偶校验位的产生和检测
停止位:1 或 2 个停止位产生
位顺序:低位优先或高位优先传输
● 错误侦测:奇偶校验、溢出和帧错误
● 自动硬件流控制模式 – RTS、CTS
● IrDA SIR 编码器和解码器
● 具有输出使能控制的 RS485 模式
● FIFO 深度:8×9 位接收器和发送器
通用同步异步收发器 USART 提供了一个灵活的采用同步或异步传输的全双工数据交换。USART用来转换并行和串行接口之间的数据,通常也被用作 RS232 标准通信。USART 外设功能支持四种类型的中断,包括线路状态中断、发送 FIFO 空中断、接收器阈值级别到达中断和超时中断。USART 模块包括一个发送 FIFO (TX_FIFO) 和一个接收 FIFO (RX_FIFO)。通过读取线路状态寄存器LSR,软件可以检测 USART的错误状态。状态包括传输模式下的类型和状况以及因奇偶、溢出、帧和暂停事件造成的错误状况。
最终实现效果
main.c
#include "ht32.h"
#include "usart.h"
int main()
{
USART_Configuration();//串口初始化
while(1)
{
//循环发送字符串,用于测试是否通信成功
Usart_SendStr(COM1_PORT,"你好!");
}
}
usart.c
#include "usart.h" #include "ht32f5xxxx_gpio.h" #include "ht32_board.h" #include "ht32_board_config.h" /*USART_Configuration函数说明:配置usart串口*/ void USART_Configuration(void) { USART_InitTypeDef USART_InitStructure; CKCU_PeripClockConfig_TypeDef CKCUClock= {{0}}; CKCUClock.Bit.AFIO = 1; COM1_CLK(CKCUClock) = 1; //开启时钟 CKCU_PeripClockConfig(CKCUClock, ENABLE); AFIO_GPxConfig(USART_GPIO_GROUP, USART_TX_PIN, AFIO_FUN_USART_UART); AFIO_GPxConfig(USART_GPIO_GROUP, USART_RX_PIN, AFIO_FUN_USART_UART); /* 波特率: 115200 长度: 8bits 停止位: 1位 校验位: 无 模式: 正常模式 */ USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WORDLENGTH_8B; USART_InitStructure.USART_StopBits = USART_STOPBITS_1; USART_InitStructure.USART_Parity = USART_PARITY_NO; USART_InitStructure.USART_Mode = USART_MODE_NORMAL; USART_Init(COM1_PORT, &USART_InitStructure); // 使能 COM1_PORT 发送和接收 USART_TxCmd(COM1_PORT, ENABLE); USART_RxCmd(COM1_PORT, ENABLE); //中断设置 NVIC_EnableIRQ(COM1_IRQn); USART_IntConfig(COM1_PORT, USART_FLAG_RXDR , ENABLE); USART_IntConfig(COM1_PORT, USART_FLAG_TXDE , ENABLE); /* 设置FIFO接收等级*/ USART_RXTLConfig(COM1_PORT, USART_RXTL_04); } /*COM1_IRQHandler函数说明:接收中断服务函数*/ void COM1_IRQHandler(void) { u8 data; if( USART_GetFlagStatus(COM1_PORT, USART_FLAG_RXDR ) )//接收中断 { data = USART_ReceiveData(COM1_PORT);//读取接收到的数据 printf("data = %c\n",data); //把收到的数据发送回电脑 } } /*函数说明:FIFO*/ void USART_Tx(const char* TxBuffer, u32 length) { int i; for (i = 0; i < length; i++) { while (!USART_GetFlagStatus(COM1_PORT, USART_FLAG_TXC)); USART_SendData(COM1_PORT, TxBuffer[i]); } } /*函数说明:发送一个字节*/ void Usart_Sendbyte(HT_USART_TypeDef* USARTx, u8 data) { USART_SendData(USARTx, data); while (USART_GetFlagStatus(USARTx, USART_FLAG_TXDE) == RESET); } /*Usart_SendArray函数说明:发送数组*/ void Usart_SendArray(HT_USART_TypeDef* USARTx, u8 *array,u8 num) { u8 i; for( i = 0;i < num;i++) { Usart_Sendbyte(USARTx,*array); array++; } } /*Usart_SendStr函数说明:发送字符串*/ void Usart_SendStr(HT_USART_TypeDef* USARTx, uint8_t *str) { uint8_t i; for(i = 0;str[i] != '\0';i++) { Usart_Sendbyte(USARTx,str[i]); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。