迪文串口屏显示驱动
迪文的显示屏使用起来比较方便,其使用串口通讯,即可支持RS232,又可以支持TTL电平。在NUCLEO-F412ZG实验板上,USART2已经引到了CN9上,我们就利用USART2来实现与迪文串口屏的通讯试验。USART2硬件接口如下图红框所示:
我们在STM32CubeMX中配置USART2,打开“USART2Configuration”界面,打开“GPIO Settings”标签:
配置完成后,我们生成项目源码,USART2的配置如下:
/* USART2 init function */
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if(HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
}
在上述配置函数中,调用了HAL_UART_Init函数来初始化USART2,同时调用HAL_UART_MspInit函数来初始化硬件配置,HAL_UART_MspInit函数需要我们编写供系统回调。
接下来我们编写向屏写数据的源码,我们向屏写氧气百分比、氢气百分比、甲烷百分比、乙炔百分比、乙烯百分比和丙烷百分比等数据。
//向屏写数据,用于数据显示
void SetDataToLCD(void)
{
uint16_tlength=SetVarDataLength;
uint8_ttxData[SetVarDataLength];
uint16_tstartAddress=0x0000;
//对往下写的数据作格式化转换
SendDataProcess(txData);
//发送数据
WriteDataToLCD(startAddress,txData,length);
}
其中SendDataProcess函数是对要写的数据进行格式化,因为屏幕只能接受符合其要求格式的数据。WriteDataToLCD是我们封装的向屏发送数据的函数:
//写数据变量存储器
void WriteDataToLCD(uint16_t startAddress,uint8_ttxData[],uint16_t length)
{
/*命令的长度由帧头(2个字节)+数据长度(1个字节)+指令(1个字节)+起始地址(2个字节)+数据(长度为length)*/
uint16_tcmd_Length=length+6;
uint8_tcmd_VAR_Write[WriteDataCommandLength];
cmd_VAR_Write[0]=0x5A;
cmd_VAR_Write[1]=0xA5;
cmd_VAR_Write[2]=(uint8_t)(length+3);
cmd_VAR_Write[3]= FC_VAR_Write;
cmd_VAR_Write[4]=(uint8_t)(startAddress>>8);//起始地址
cmd_VAR_Write[5]=(uint8_t)startAddress;//起始地址
for(intdataIndex=0;dataIndex<length;dataIndex++)
{
cmd_VAR_Write[dataIndex+6]=txData[dataIndex];
}
SendData(cmd_VAR_Write,cmd_Length);
}
编写完成后我们运行调试:
调试无误后,我们在IO终端中查看数据显示结果,证明运行数据是没有问题的。
接下来我们在先视频上查看数据,与在IO终端中一致,就是说屏显示的数据就是MCU发送给它的数据:
再来看看对传感器做一下扰动时(用配气仪和小型气泵向传感器管道送不同的气)数据的变化,传感器检测对象变化是屏幕显示也变化。
再来改变一下气体成分和气泵的转速看看数据的变化:
经过以上实验,NUCLEO-F412ZG通过串口与迪文串口屏通讯完全可行。