ht32 驱动串口屏的示例代码
时间: 2023-10-30 15:21:01 浏览: 31
以下是使用 HT32 驱动串口屏的示例代码:
```c
#include "ht32f5xxxx_01.h"
#include "ht32f5xxxx_gpio.h"
#include "ht32f5xxxx_usart.h"
#define USARTx_IRQn USART2_IRQn
#define USARTx_IRQHandler USART2_IRQHandler
/* 定义串口屏发送命令的常量 */
#define CMD_ENTER_SLEEP_MODE 0xA5 // 进入休眠模式
#define CMD_EXIT_SLEEP_MODE 0xA6 // 退出休眠模式
#define CMD_CLEAR_SCREEN 0x01 // 清屏命令
#define CMD_SET_CURSOR_POS 0x80 // 设置光标位置命令
USART_InitTypeDef USART_InitStructure;
void USARTx_Configuration(void)
{
/* 使能 USART2 时钟 */
CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
CKCUClock.Bit.USART2 = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE);
USART_InitStructure.USART_BaudRate = 9600; // 波特率为 9600
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_TX_RX; // 发送和接收模式
USART_Init(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
}
void USARTx_SendByte(u8 byte)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXBE) == RESET); // 等待发送缓冲区为空
USART_SendData(USART2, byte); // 发送数据
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); // 等待发送完成
}
void USARTx_SendCmd(u8 cmd)
{
USARTx_SendByte(0x55); // 命令头
USARTx_SendByte(cmd); // 命令码
}
void USARTx_SendString(char *str)
{
while (*str)
{
USARTx_SendByte(*str++);
}
}
void USARTx_SendChar(char ch)
{
USARTx_SendByte(ch);
}
void USARTx_SendInt(int val)
{
char buf[16];
sprintf(buf, "%d", val);
USARTx_SendString(buf);
}
void USARTx_SendFloat(float val)
{
char buf[16];
sprintf(buf, "%.2f", val);
USARTx_SendString(buf);
}
void USARTx_SendNewLine(void)
{
USARTx_SendString("\r\n");
}
void USARTx_SendClearScreen(void)
{
USARTx_SendCmd(CMD_CLEAR_SCREEN);
}
void USARTx_SendSetCursorPos(u8 row, u8 col)
{
USARTx_SendCmd(CMD_SET_CURSOR_POS);
USARTx_SendByte(row);
USARTx_SendByte(col);
}
void USARTx_EnterSleepMode(void)
{
USARTx_SendCmd(CMD_ENTER_SLEEP_MODE);
}
void USARTx_ExitSleepMode(void)
{
USARTx_SendCmd(CMD_EXIT_SLEEP_MODE);
}
int main(void)
{
USARTx_Configuration();
/* 发送命令,清屏 */
USARTx_SendClearScreen();
/* 发送命令,设置光标位置 */
USARTx_SendSetCursorPos(1, 1);
/* 发送字符串 */
USARTx_SendString("Welcome to use HT32 USART driver!");
/* 进入休眠模式 */
USARTx_EnterSleepMode();
while (1)
{
/* 从休眠模式中恢复 */
USARTx_ExitSleepMode();
/* 等待一段时间 */
for (int i = 0; i < 1000000; i++);
/* 再次进入休眠模式 */
USARTx_EnterSleepMode();
}
}
void USARTx_IRQHandler(void)
{
/* 处理 USART 中断事件 */
}
```
这段代码使用了 HT32 的 USART 驱动来发送命令和数据,使用了一些常用的串口屏命令,如清屏、设置光标位置、进入休眠模式等。可以根据具体的需求进行修改。