找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1055|回复: 6
打印 上一主题 下一主题
收起左侧

STM32F103和HMI串口屏通信,参考了论坛上大佬的单片机代码,但是依旧有问题

[复制链接]
跳转到指定楼层
楼主
ID:1019495 发表于 2022-7-23 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码写的很清晰,但是不知道为什么单片机和串口屏接上去之后,没有进行赋值,LED0依然是闪烁,说明也是正常工作
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"         

#include "hmi.h"

u8 dat[] = "add 1,0,9 0xff,0xff,0xff";
int t=0;
u8 date[] = {0xff,0xff,0xff};

int main(void)
{         
        delay_init();                     //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(9600);                 //串口初始化为115200         
        uart3_init(115200);
         LED_Init();                             //LED端口初始化
         
        while(1)
        {
                for(t=0;t<56;t++)
        {        
            while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
            USART_SendData(USART3,dat[t]);                                         
        }
                //                HMI_SendNum(USART3,"n0.val=",0,2,4);
//          HMI_SendNum(USART3,"n1.val=",7,(int)2,1);
//          HMI_SendNum(USART3,"n2.val=",7,((int)2)/100,1);
//          HMI_SendNum(USART3,"n3.val=",7,(((int)2)/10)%10,1);
//          HMI_SendNum(USART3,"n4.val=",7,((int)2)%10,1);
               
          HMI_SendText(USART1,"t0.txt=",7,"文本测试",8);        
                                       
                LED0=!LED0;
                delay_ms(250);        
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2022-7-23 11:41 | 只看该作者
代码写的很清晰,这是什么意思?
LED0=!LED0;这个本身就是在循环中的,又没有什么条件的,它肯定一直是闪灯的呀
那么,你这问题是什么呢?
就这几行代码,你也没有说明你的程序有什么问题呀
而且,串口屏的程序呢?
回复

使用道具 举报

板凳
ID:1040182 发表于 2022-7-23 13:20 | 只看该作者
HMI_SendText(USART1,"t0.txt=",7,"文本测试",8);      
                                       
                LED0=!LED0;
                delay_ms(250);      
改成
HMI_SendText(USART1,"t0.txt=",7,"文本测试",8)      
             {                          
                LED0=!LED0;
                delay_ms(250);   
              }
发送数据的时候进行闪烁 是要这样吗?
回复

使用道具 举报

地板
ID:1019495 发表于 2022-7-23 13:57 | 只看该作者
Y_G_G 发表于 2022-7-23 11:41
代码写的很清晰,这是什么意思?
LED0=!LED0;这个本身就是在循环中的,又没有什么条件的,它肯定一直是闪灯的 ...

这是串口屏的代码,
#include "sys.h"
#include "hmi.h"       
/************************************************************************
           说明:本函数库为陶晶池串口屏数据发送指令库,包含以下函数
                                         
1.数值发送函数:void HMI_SendNum(USART_TypeDef* USARTx,u8 *data,u8 len,u16 Num,u8 len2)
            USART_TypeDef* USARTx: 选择串口输出,注意必须先初始化、使能该串口
            u16 *data:上位机上数字位相应的改变数值代码,如"n0.val="、"n1.val="
                                                u8 len:*data代码的长度。如"n0.val="长度为7。
            u16 Num:需要串口输出显示的数值,注意开头0不显示,输出数字0开头会报错
            u8 len2:需要显示的数值的位数    注意不能大于上位机上设定的位数

2.字符串发送函数:void HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
            USART_TypeDef* USARTx: 选择串口输出,注意必须先初始化、使能该串口
            u16 *data:上位机上文本位相应的改变数值代码,如"t0.txt="、"t1.txt="
                  u8 len:*data代码的长度。如"t0.txt="长度为7。
            u8 *text:需要串口输出显示的文本
            u8 len2:需要显示的文本的长度,英文一个字符一字节、汉字一个字两个字节   
                                                         注意取的值可以比文本长度大,但不能大于上位机上设定的长度

*************************************************************************/



//10的乘方函数,用于判断位数
u32 HMI_Pow(u8 n)
{
        u32 result=1;         
        while(n--)result*=10;   
        return result;
}       


//数值发送函数
//USART_TypeDef* USARTx: 选择串口输出,注意必须先初始化、使能串口
//u16 *data:上位机上数字位相应的改变数值代码
//u8 len:*data代码的长度。
//u16 Num:需要显示的数值,注意开头0不显示
//u8 len2:需要显示的数值的位数
void HMI_SendNum(USART_TypeDef* USARTx,u8 *data,u8 len,u16 Num,u8 len2)
{
                u8 t;
for(t=0;t<len;t++)
        {       
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,data[t]);                                        
        }
for(t=0;t<len2;t++)       
{
           while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
           USART_SendData(USARTx,'0'+(Num/HMI_Pow(len2-t-1))%10);


}
                               
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0XFF);
              
              
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0XFF);
            
              
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0XFF);

}

//字符串发送函数:HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
//            USART_TypeDef* USARTx: 选择串口输出,注意必须先初始化、使能该串口
//            u16 *data:上位机上文本位相应的改变数值代码,如"t0.txt="、"t1.txt="
//                  u8 len:*data代码的长度。如"t0.txt="长度为7。
//            u8 *text:需要串口输出显示的文本
//            u8 len2:需要显示的文本的长度,英文一个字符一字节、汉字一个字两个字节   

void HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
{
                u8 t;
    for(t=0;t<len;t++)
        {       
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,data[t]);                                        
        }
                                    while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0X22);
   for(t=0;t<len2;t++)       
       {
           while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
           USART_SendData(USARTx,text[t]);


       }
                                                 while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0X22);
                               
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0XFF);
              
              
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0XFF);
            
              
            while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
            USART_SendData(USARTx,0XFF);




}
回复

使用道具 举报

5#
ID:401564 发表于 2022-7-24 00:14 | 只看该作者
sadadasddas2 发表于 2022-7-23 13:20
HMI_SendText(USART1,"t0.txt=",7,"文本测试",8);      
                                       
    ...

你这就加了个{}而已,能不能编译得过去还不知道呢
回复

使用道具 举报

6#
ID:401564 发表于 2022-7-24 08:29 | 只看该作者
SereinM 发表于 2022-7-23 13:57
这是串口屏的代码,
#include "sys.h"
#include "hmi.h"       

你给这代码什么意思?
你要做什么?
你说的不行是什么意思,到底哪里不行?
串口一定要先设置好,你可以先用电脑的串口助手接收一下STM32发送了什么
而且,控件的名称一定要对应,也要先创建好字库
回复

使用道具 举报

7#
ID:95436 发表于 2022-11-21 13:50 | 只看该作者
虽然我解决不了问题,但是我觉得提问者搞得人家一头雾水,要么你直接整个程序发上来让人家帮看看,你这贴这么一点人家怎么知道你要干什么。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表