ht32驱动串口屏显示波形完整代码
时间: 2023-10-31 20:10:20 浏览: 38
以下是一个基于HT32芯片的串口屏显示波形的完整代码示例:
```c
#include "ht32f5xxxx.h"
#include "ht32f5xxxx_usart.h"
#include "ht32f5xxxx_gpio.h"
#include "ht32_board.h"
#define USARTx HT_USART1
#define USARTx_IRQn USART1_IRQn
#define USARTx_IRQHandler USART1_IRQHandler
/* 波形数据 */
u8 waveform_data[] = {
0x00, 0x00, 0x00, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x18, 0x3C, 0x7E, 0xFF, 0x7E, 0x3C, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0x7E, 0x3E, 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
};
/* 波形数据长度 */
#define WAVEFORM_DATA_LEN 128
/* USART 配置函数 */
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
USART_StructInit(&USART_InitStructure);
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_TX;
USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
USART_Init(USARTx, &USART_InitStructure);
USART_TxCmd(USARTx, ENABLE);
}
/* GPIO 配置函数 */
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 串口引脚配置 */
AFIO_GPAConfig(AFIO_PIN_9 | AFIO_PIN_10, AFIO_MODE_7);
/* 串口管脚配置 */
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_9 | GPIO_PIN_10;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 串口屏控制管脚配置 */
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_7;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/* 发送一个字节到串口 */
void USART_SendByte(USART_TypeDef* USARTx, u8 byte)
{
USART_SendData(USARTx, byte);
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
/* 发送波形数据到串口屏 */
void SendWaveformData(void)
{
/* 发送开始命令 */
USART_SendByte(USARTx, 0xA5);
USART_SendByte(USARTx, 0x5A);
USART_SendByte(USARTx, 0x01);
/* 根据波形数据长度发送数据 */
for (u16 i = 0; i < WAVEFORM_DATA_LEN; i++) {
USART_SendByte(USARTx, waveform_data[i]);
}
/* 发送结束命令 */
USART_SendByte(USARTx, 0xA5);
USART_SendByte(USARTx, 0x5A);
USART_SendByte(USARTx, 0x02);
}
int main(void)
{
/* 系统时钟配置 */
CKCU_Configuration();
/* GPIO 配置 */
GPIO_Configuration();
/* USART 配置 */
USART_Configuration();
/* 串口屏控制管脚拉高 */
GPIO_SetOutBits(GPIOB, GPIO_PIN_7);
/* 发送波形数据到串口屏 */
SendWaveformData();
while (1) {
}
}
```
需要注意的是,这里的代码仅供参考,实际使用时需要根据自己的硬件和需求进行修改。