目前水表、电表、热表、气表还有采用人工抄表的,技术太落后了。也有采用集中抄表的,但需要架设抄表系统,有用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,尝尝鲜。
这个文件是图示化开发工具,以前没有用过的。估计是硬件资源越发丰富,软件开发越发复杂,就配了些工具吧。 采用免费的FreeRTOS来提供任务管理、时间管理、信号量、消息队列、内存管理等功能。任务管理上可为抢占内核也可为不可抢占内核,同时支持轮换调度和优先级调度算法。整个系统只有3个文件,外加上port的和处理器相关的两个文件。 就绪任务表是pxReadyTasksLists,延时任务链表是xDelayedTaskList,事件等待链表、任务删除链表。任务控制块tskTaskControlBlock中没有任务状态是因为不同状态的任务直接接入对应的链表。常用的函数主要有 创建任务的函数xTaskCreate(任务函数名称,任务名字可选,任务堆栈大小,任务参数,任务优先级,可选参数) 启动操作系统的函数vTaskStartScheduler()。 创建定时器任务的函数xTimerCreateTimerTask()。 启动定时器函数xTimerStart |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
RE:【STM32F429心得\疑问】利用STM32F429实现抄表功能
1、需要串口1收发上位机命令和数据,中断接收,查询发送。
2、需要串口2接红外收发模块与表计通信
3、需要显示器进行抄表操作显示
4、需要外部中断进行表计中断操作
RE:【STM32F429心得\疑问】利用STM32F429实现抄表功能
{
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[ptrint]=tempint;
flagstatus=1; //特征位
ptrint++;
}
}
if(flag681 && (!flag682) )//不是,判断是否接收到第2个68
{
buf[ptrint]=tempint;
if((ptrint==7) && (tempint==0x68)){flagstatus=2;a=0;}
ptrint++;
}
if(flag681 && flag682 && !flaglen ) //接收第2个68后的两个字符即控制码和长度
{
buf[ptrint]=tempint;
ptrint++;
if(ptrint==10){flagstatus=3;control=buf[ptrint-2];len=buf[ptrint-1];a=0;}
}
if(flag681 && flag682 && flaglen && !flagdata)//接收数据区
{
buf[ptrint]=tempint-0x33;
ptrint++;
a++;
if(a==len){flagstatus=4;a=0;}
}
if(flag681 && flag682 && flaglen && flagdata && !flagchk)//接收检验
{
buf[ptrint]=tempint;
if(ptrint==len+10)
{
sum=0;
for(i=0;i