annysky2012 发表于 2021-11-3 22:16

【拓普微智能显示模块测评】5.开发板NUCLEO-F746ZG与智能显示模块通讯

<div class='showpostmsg'><p><span style="font-size:16px;">为了能够使用开发板NUCLEO-F746ZG与智能显示模块建立联系,本想着很简单的一件事情,可走了不少的弯路,费了一点周折。</span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">先说遇到的囧事:</span></p>

<p><span style="font-size:16px;">(1)NUCLEO-F746ZG开发板的UART8不能使用。使用STM32CubeMX配置完成后,写完程序,开发板定时发送数据,使用USB转TTL的工具监测发送数据,发现一直没有数据发出。我简单看了一下时钟配置:UART8的时钟与LPTIM在一起,是不是这个原因,我还得好好看看数据手册查找一下。</span></p>

<p><span style="font-size:16px;"></span></p>

<p><span style="font-size:16px;">使用UART7一点问题没有,反复验证UART8始终没有数据发出,很奇怪。</span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">(2)TTL转RS232模块,这个以前从网上买的,给我留了一个大坑:它的DB9定义中2脚和3脚定义是反的,本来2脚应该是RXD,3脚是TXD,没想到2脚是TXD,3脚是RXD。</span></p>

<p><span style="font-size:16px;">让我一顿好测试呀,换了模块,飞线,折腾半天。</span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">前两个问题解决以后,那就简单多了。在程序中定时发送数据:</span></p>

<pre>
<code>void SendHIM(uint16_t cmd, uint8_t *Tdata,uint16_t CharLen)
{
    uint16_t   i=0;

    SendBuf_COM=FrameHeader;         //0xAA
    SendBuf_COM=cmd;               //命令
    SendBuf_COM = FrameEnd&gt;&gt;24;
    SendBuf_COM = (FrameEnd&gt;&gt;16)&amp;0xff;
    SendBuf_COM = (FrameEnd&amp;0xffff)&gt;&gt;8;
    SendBuf_COM = FrameEnd&amp;0xff;

    if(CharLen&gt;0){
      for(i=0; i&lt;CharLen; i++) //数据
      {
          SendBuf_COM=*(Tdata++);
      }      
    }

    sendCount=6+CharLen; //发送数据长度

    HAL_UART_Transmit(&amp;huart7,(uint8_t*)SendBuf_COM,sendCount,1000);        //发送接收到的数据
                while(__HAL_UART_GET_FLAG(&amp;huart7,UART_FLAG_TC)!=SET);                //等待发送结束

}</code></pre>

<p>&nbsp;</p>

<p><span style="font-size:16px;">另外我把屏的命令定义了,想用的可以随时复制粘贴:</span></p>

<pre>
<code>//Parameter setting
#define       CMD_ShakeHands                     0x30          //用于确认屏是否连接正常
#define       CMD_ReadVersion                  0x31          //读版本号
#define       CMD_ReadPageNumber               0x32          //读取当前正在显示的页面 ID
#define       CMD_TouchCoordinatesBack         0x72   //0X73 //自动返回触摸位置坐标
#define       CMD_TouchDataBack                  0x77          //自动返回数据(键盘录入数据或触摸键运算操作数据)
#define       CMD_TouchIDback                  0x78          //自动返回页面 ID 和触摸键 ID
#define       CMD_SetWorkMode                  0xE0          //设定模块的通信波特率、触摸返回码、文本显示模式
#define       CMD_CutoverProject               0xE1          //切换到指定工程并显示
#define       CMD_SetTouchScreenCalibration      0xE4          //设定触摸屏进入校准模式
#define       CMD_SetScreensaver               0x5E          //设置进入屏保时间和屏保状态下的背光亮度
#define       CMD_SetBacklight                   0x5F          //设置背光亮度
#define       CMD_SetBuzzerDuration            0x79          //设置蜂鸣器 1 次的鸣叫时间
#define       CMD_BuzzerControl                  0x7A          //控制蜂鸣器打开关闭、声音频率、时间长短
#define       CMD_SetClock                     0x9C          //设置模块日期时间
#define       CMD_ReadClock                      0x9B          //读取模块日期时间
#define       CMD_WriteFlash                     0x90          //写入数据到 flash (Flash 中数据断电可保存)
#define       CMD_ReadFlash                      0x91          //读取 flash 数据
#define       CMD_ReadUSRBINData               0x93          //读取 USR.BIN 中用户文件数据
#define       CMD_FormatInternalStorage          0xE2          //格式化内部存储器(工程包,Flash 数据,加密设定都会被清空)
#define       CMD_DecryptInternalMemory          0xE3          //用于内部存储器盘加密的情况下, 对内部存储器进行一次解锁

//Display control
#define       CMD_PageDisplay                  0x70          //显示指定的页面(画面)
#define       CMD_SetControlFontColor            0x7E          //更改页面中字符串变量或数字变量的字体颜色
#define       CMD_SetControlBackgroundColor      0x7F          //改变页面中字符串变量或数字变量的背景色
#define       CMD_SetFont                        0xE7          //设置字库国家码和外扩 Codepage
#define       CMD_RefreshControl               0xE8          //设定当前画面暂停刷新或开始刷新,暂停刷新后触摸键无响应、变量显示不更新数据。

//Variable read and write
#define       CMD_WriteNumericVariables          0x82          //写数字变量 可往 16/32/64 位数字变量地址中连续写入多个数据
#define       CMD_ReadNumericVariables         0x83          //读数字变量 读取 16/32/64 位数字变量地址中的连续多个数据
#define       CMD_WriteCurveData               0x4D          //曲线数据写 对曲线图数据写入, 控制曲线图的显示,以修改的方式进行刷新
#define       CMD_PushLefttoWriteCurveData       0x4E          //左推进写曲线数据 对曲线图数据写入, 以推进的方式控制曲线图的显示有利于对数据变化随时间变化的曲线显示减小传输的数据量
#define       CMD_Set8bitSystemRegister          0x3B          //8 位系统寄存器设定 用于控制计数寄存器的工作方式
#define       CMD_ReadSystemRegisterData         0x3C          //读取系统寄存器数据 读取寄存器中数据
#define       CMD_WriteBitmapData                0x4B          //位图数据写 单色位图数据写入, 控制位图显示
#define       CMD_WriteBitmapCompressedData      0x4C          //位图压缩数据写 单色位图压缩数据写入, 可减小数据量,控制位图显示
#define       CMD_WriteStringVariable            0x42          //写字符串变量
#define       CMD_ReadStringVariable             0x43          //读字符串变量 对字符串变量进行读写, 可用于控制字符串控件显示
#define       CMD_FillStringVariables            0x46          //填充字符串变量
#define       CMD_Write16bitNumericVariable      0x3D          //写 16 位数字变量对 16 位数据变量进行读写, 可用于控制:数值控件显示, 图标索引显示,十进位图标显示进度条显示, VPK 操作等 0x3E 读 16 位数字变量
#define       CMD_Read16bitNumericVariable       0x3E          //填充 16 位数字变量
#define       CMD_Fill16bitNumericVariable       0x3F          //填充 16 位数字变量
#define       CMD_Write32bitNumericVariable      0x44          //写 32 位数字变量对 32 位数据变量进行读写。可用于控制数值控件显示控制十进制图标显示
#define       CMD_Read32bitNumericVariable       0x45          //读 32 位数字变量
#define       CMD_Fill32bitNumericVariable       0x47          //填充 32 位数字变量
#define       CMD_Write64bitNumericVariable      0x48          //写 64 位数字变量
#define       CMD_Read64bitNumericVariable       0x49          //读 64 位数字变量 对 64 位数据变量进行读写。可用于控制数值控件显示
#define       CMD_Fill64bitNumericVariable       0x4A          //填充 64 位数字变量
#define       CMD_VariableFlashDataExchange      0x94          //变量与 Flash 数据交换 对变量与 Flash 之间进行数据交换
#define       CMD_WriteusrbinFiletoVP            0x95          //写 usr.bin 文件到 VP 从 usr.bin 文件中读取数据到 VP 变量中


#define       FrameHeader                        0xAA          //帧头
#define       FrameEnd                           0xCC33C33C    //帧尾
</code></pre>

<p>&nbsp;</p>

<p><span style="font-size:16px;">一切准备就绪,编译完成后,下载程序,请看效果:</span></p>

<p><span style="font-size:16px;"></span></p>

<p><span style="font-size:16px;">这次只是简单的开发板与显示屏建立联系,程序就不上传了,等我把程序整理完成后,把功能做进去再分享给大家。</span></p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2021-11-4 07:48

<p>网上买的TTL转RS232模块 质量有好有坏</p>

annysky2012 发表于 2021-11-4 09:02

网上买的TTL转RS232模块 质量有好有坏


<p>可不是嘛,一不小心就坑住了</p>

wangerxian 发表于 2021-11-4 10:33

<p>UART8从图上看,确实需要LPTIM的支持。</p>

annysky2012 发表于 2021-11-4 13:26

wangerxian 发表于 2021-11-4 10:33
UART8从图上看,确实需要LPTIM的支持。

<p>有可能呀,等我过两天好好看看到底是什么原因</p>

freebsder 发表于 2021-11-5 22:53

<p>支持一下,有注释好看多了。</p>

迦南A 发表于 2021-11-10 18:11

非常好
页: [1]
查看完整版本: 【拓普微智能显示模块测评】5.开发板NUCLEO-F746ZG与智能显示模块通讯