zt1234 发表于 2014-4-9 10:29:03

【STM32F429心得\疑问】利用STM32F429实现抄表功能

目前水表、电表、热表、气表还有采用人工抄表的,技术太落后了。也有采用集中抄表的,但需要架设抄表系统,有用485总线的,有用红外线的,还有用MBUS。先集抄再上传。STM32F429有显示器可以显示抄表结果,有串口转网络接口可以远传,有串口可以与表计通信,再外扩些接口电路,实现一个远程抄表应用不错。
了解一下STM32F429 DISCOVERY
器原始资源在http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1848/PF259090?s_searchtype=partnumber
 
   LQFP144的STM32F429ZIT6是180 MHz的Cortex-M4有FPU,有2 MB Flash和256 KB RAM并有一片64M的SDRAM。在线ST-LINK/V2仿真编程器。L3GD20为三轴陀螺仪。ILI9341 控制的2.4吋的262K颜色240 x 320点阵的QVGA的TFT显示屏,使用STemWin GUI,初始代码有时钟日历、视频及图片播放、CPU性能检测等。推荐的开发环境有IAR、MDK及TrueSTUDIO.。就用MDK4.70A吧。目前升级到ARM5.10,尝尝鲜。
                                    STSW-STM32138
                                    STM32F429 discovery firmware package   (UM1662)是固件应用程序
                      这个文件为固件文件,与以前的类似,就是开发环境下的应用程序,包括板子原始程序工程。
 
                                    STSW-STM32141
                                    STM32F429 discovery .Net Micro   Framework package (UM1676)是上位机的应用程序
                      这个文件是配合固件的上位机应用程序,NET环境的C#源文件。
 
                                    STM32CubeF4
                                    STM32Cube firmware for STM32 F4 series   (HAL drivers, USB, Ethernet, File System, ...) (UM1730)是图示化开发工具
                     
这个文件是图示化开发工具,以前没有用过的。估计是硬件资源越发丰富,软件开发越发复杂,就配了些工具吧。
 采用免费的FreeRTOS来提供任务管理、时间管理、信号量、消息队列、内存管理等功能。任务管理上可为抢占内核也可为不可抢占内核,同时支持轮换调度和优先级调度算法。整个系统只有3个文件,外加上port的和处理器相关的两个文件。
就绪任务表是pxReadyTasksLists,延时任务链表是xDelayedTaskList,事件等待链表、任务删除链表。任务控制块tskTaskControlBlock中没有任务状态是因为不同状态的任务直接接入对应的链表。常用的函数主要有
创建任务的函数xTaskCreate(任务函数名称,任务名字可选,任务堆栈大小,任务参数,任务优先级,可选参数)
启动操作系统的函数vTaskStartScheduler()。
创建定时器任务的函数xTimerCreateTimerTask()。
启动定时器函数xTimerStart

zt1234 发表于 2014-4-21 08:25:28

RE:【STM32F429心得\疑问】利用STM32F429实现抄表功能

设计的抄表功能需要的资源包括:
1、需要串口1收发上位机命令和数据,中断接收,查询发送。
2、需要串口2接红外收发模块与表计通信
3、需要显示器进行抄表操作显示
4、需要外部中断进行表计中断操作

zt1234 发表于 2014-4-21 08:27:43

RE:【STM32F429心得\疑问】利用STM32F429实现抄表功能

1、利用串口中断接收645-2007标准的抄表命令
{
        static bit flag682,flag681,flaglen,flagdata,flagchk,flagover;
        static unsigned char a,control,len,flagstatus,ptrint;
        unsigned char tempint,i,sum;
        frame=0;
        tempint=SBUF;
       
        if(tempint==0x68)    //判断是否接收到帧头
        {
                if(!flag681)    //是
                {
               buf=tempint;
               flagstatus=1;      //特征位
               ptrint++;
               }
        }
        if(flag681 && (!flag682))//不是,判断是否接收到第2个68
        {
        buf=tempint;
        if((ptrint==7) && (tempint==0x68)){flagstatus=2;a=0;}
        ptrint++;       
        }
        if(flag681 && flag682 && !flaglen )//接收第2个68后的两个字符即控制码和长度
        {
                buf=tempint;
                ptrint++;
                if(ptrint==10){flagstatus=3;control=buf;len=buf;a=0;}
        }
        if(flag681 && flag682 && flaglen && !flagdata)//接收数据区
        {
                buf=tempint-0x33;
                ptrint++;
                a++;
                if(a==len){flagstatus=4;a=0;}
        }

        if(flag681 && flag682 && flaglen && flagdata && !flagchk)//接收检验
        {
                buf=tempint;
                if(ptrint==len+10)
                {
                sum=0;
                for(i=0;i
页: [1]
查看完整版本: 【STM32F429心得\疑问】利用STM32F429实现抄表功能