博主在一次电赛训练题中使用到了广州大彩公司的F系列串口屏, 遇到了很多坑, 也学到了很多东西,在这里给大家分享一下。
1.确定固件版本号
固件版本号代表了设备烧入的程序版本,获取版本的方法如下:
1. 直接看屏背面标签。正常情况下,产品出厂前背面均有型号和标签,如图所示。
2. 如果屏背面无贴固件标签,则需连接转接板,然后打开VisualTFT软件,选择串口COM通道,点击“联机设备”,如图 1.4 所示。联机成功后,软件右下角将显示对应产品版本号。
补充一点,大彩的转接板接线方式和普通的串口接线有区别, TX-TX ,RX-RX ,GND-GND, 不需要接VCC!!!
2.RS232和TTL电平设置
这个问题很重要!!!,因为彩屏是默认为RS232电平有效,单片机的是TTL电平,所以我们要将其设置成TTL电平有效,博主当初因为这个问题,调了一周的时间都无法实现板子和彩屏通信,下面介绍设置方法:
先找到通讯接口J5附近标有白色丝印“ON= TTL, OFF=RS232”,如图 所示,然后将其短路即为TTL电平,反之断开就是232电平了。
如还有其他硬件方面问题,请参考以下链接解决:http://blog.sina.com.cn/s/blog_e360f58a0102wr1m.html
3.彩屏例程移植到F407
把彩屏例程移植到F407上,只需将官方所给例程中的cmd_queue.c, hmi_driver.c, cmd_process.h, cmd_queue.h, hmi_driver.h 复制至F407程序中, 编译后将 #include "hmi_user_uart.h" 改为自己的串口文件, 博主的是 #include "usart.h" ,再将 “hmi_user_uart.h” 中的宏定义
#define uchar unsigned char
#define uint8 unsigned char
#define uint16 unsigned short int
#define uint32 unsigned long
#define int16 short int
#define int32 long
复制至自己的 “usart.h ”文件中
并将 “hmi_user_uart.c” 文件中的
void SendChar(uchar t)
{
USART_SendData(USART1,t);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
while((USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET));//等待串口发送完毕
}
复制到自己的 “usart.c”中,编译后将无关的头文件去掉即可。
4.替换串口中断函数
将自己程序中的串口中断函数改为
void USART1_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1);
uint8_t data = USART_ReceiveData(USART1);
queue_push(data);
}
}
这步骤很重要,如果不替换串口中断函数, 单片机将无法收到并正确响应彩屏所发信息。
5.单片机与彩屏通信问题
首先先确定波特率, 通信失败有百分之九十的可能是波特率问题, 确定波特率正确后,使用串口调试助手或者DEBUG看单片机所发的指令是否正确, 指令内容在官方提供的资料中有。 确定波特率正确,其他连接没有问题后, 在 stm32f4xx.h文件中,找 “HSE_VALUE”, 看看是否晶振和板子上一致,博主的是8M晶振。
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
6.软件仿真问题
很遗憾,F407不能软件仿真, 博主是用的F103进行软件仿真,按照官方所给的教程,编写COMDBUG文件
MODE COM4 115200,0,8,1
ASSIGN COM4
将其按照指导步骤加入工程即可实现软件仿真, 值得注意的是这里的1IN>和S1OUT中的1是指串口1,如需要用串口2仿真则需要将其改成
以上是博主的一些总结,水平有限,如有错误,希望大家指正。