STM32F429与陶晶驰串口屏数据传输(1)

STM32F429与陶晶驰串口屏数据传输(1)这几天正好参加 2019 年电赛国赛 为了节约 io 口的使用量 开始考虑使用串口屏 使用串口屏的好处不仅能够充当显示屏用 而且还内置了数字键盘 无需腾出 io 口给矩阵键盘 我所使用的串口屏型号为 TJC4832K035 单片机型号为 STM32F429 使用正点原子的 HAL 库

大家好,我是讯享网,很高兴认识大家。

这几天正好参加2019年电赛国赛,为了节约io口的使用量,开始考虑使用串口屏;使用串口屏的好处不仅能够充当显示屏用,而且还内置了数字键盘,无需腾出io口给矩阵键盘。
我所使用的串口屏型号为:TJC4832K035
单片机型号为:STM32F429 (使用正点原子的HAL库)

硬件连接:
GND---->GND
TX------>PA10(USART1_RX)
RX------>PA9 (USART1_TX)

+5------->+5

串口指令:指令+0xff 0xff 0xff

串口屏学习:USART HMI软件--------->左上角工具栏---------->帮助----------->入门指南、指令集


讯享网

最为重要:波特率
串口屏的波特率应和单片机波特率保持一致(串口屏的默认波特率为9600)

但是如果想要修改串口屏的波特率为来提高传输速度,可以使用系统变量baud来改变
在这里插入图片描述
修改方式可以参考如下图来修改串口屏波特率:在事件框里的“前初始化事件”里加上baud=就可以完成修改
在这里插入图片描述

单片机传输数据给串口屏

单片机方面:

  1. 因为需要用到printf(" "),所以需要使用串口通信实验,包含huart.h头文件
    注意printf只能UART1使用
  2. 要了解单片机的一些函数
    在stm32f103标准库中的发送函数:
    void USART_SendData(USART_TypeDef USARTx, uint16_t Data)*
    等待发送结束:
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};
    而在stm32f429的HAL库中的发送函数:
    HAL_UART_Transmit(*UART_HandleTypeDef *huart, uint8_t pData, uint16_t Size, uint32_t Timeout)
    等待发送结束:
    while((__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TXE)==RESET)){};
  3. 向串口屏发送指令是需要以3个0xFF结束指令,这就需要编写发送十六进制数的函数
    即:void HMISend(u8 k)
    附上编写的代码(主要是f429的)
void HMISend(u8 k) //字节发送函数 { 
    u8 i; for(i=0;i<3;i++) { 
    if(k!=0) { 
    HAL_UART_Transmit(&UART1_Handler,&k,1,1000); //stm32f103:USART_SendData(USART1,k); //发送一个字节  delay_ms(10); while((__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TXE)==RESET)){ 
   }; //stm32f103:while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待发送结束 delay_ms(10); } } } 

讯享网

串口屏方面

选用陶晶驰的串口屏需要用USART HMI来编写,界面如图1所示
在这里插入图片描述

  1. 这里我所选用的是数字控件和虚拟浮点数控件(数字:n0 ;虚拟浮点数:x0)
    如图2所示
    在这里插入图片描述
  2. 先介绍数字控件,我们只需要看其属性列表的val那栏如图2所示
    val:初始值最小-,最大
    发送指令的书写格式可参考指令集(例:n0.val=1000
    在这里插入图片描述
  3. 对于虚拟浮点数,实际上就是小数,我们需要看val,vvs0,vvs1这三栏,如图3所示
    val:初始值最小-,最大
    vvs0:整数位数(0为自动,最大10位)
    vvs1:小数位数(0为无小数,最大8位)
    显示小数(例:2.555)的方法:
    假如vvs0设置为:1;
    vvs1设置为:3;
    发送指令:x0.val=2555
    其中:2存放在整数位,555存放在小数位
    在这里插入图片描述

附上我的代码:

讯享网#include "sys.h"  #include "delay.h"  #include "usart.h"  #include "led.h"  void HMISend(u8 k); int main(void) { 
    HAL_Init(); //初始化HAL库  Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz delay_init(180); //初始化延时函数 uart_init(9600); //初始化USART LED_Init(); while(1) { 
    LED0=!LED0; //检验程序是否被卡住 printf("x0.val=%d",5233); //5.233 HMISend(0xff); printf("n0.val=%d",265); //265 HMISend(0xff); delay_ms(500); } } void HMISend(u8 k) //字节发送函数 { 
    u8 i; for(i=0;i<3;i++) { 
    if(k!=0) { 
    HAL_UART_Transmit(&UART1_Handler,&k,1,1000); //发送一个字节  delay_ms(10); while((__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TXE)==RESET)){ 
   }; //等待发送结束 delay_ms(10); } } } 

附上陶晶驰USART HMI资料链接

串口屏资料

小讯
上一篇 2025-03-14 10:41
下一篇 2025-01-11 19:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/39727.html