本帖最后由 ihalin 于 2015-12-23 23:59 编辑
终于把多功能测量仪项目整合完成了,只想说一句话---------好累好开心。
全选 将选中的图片保存到相册: ------- +创建新相册
STM32F7LOL比赛终于结束了,感谢eeworld这次学习的机会。现在终于把项目整合了,最开心也是最累的就是整合,可以学习到不少知识。
前天又是四级考试又是在整合项目真是累的够呛的。不过也过来了。
剩下时间就是期末考试了。
现在比赛也结束,发个总结帖总结总结自己在比赛这个过程中遇到的问题和自己如何去解决的以及还没解决的遗留问题。希望我能从今晚每晚更新总结帖
总结(一)
从拿到板子的国庆节开始吧
在国庆节的七天了就去了研究怎么移植STemWin买了本书和看官方的EMWIN的手册
emWin5.12手册:
emWin5中文手册.pdf
(9.11 MB, 下载次数: 27)
帖子在我的
【stm32F7英雄联盟大赛】多功能测试仪器---------手把手教你移植EMWIN+FreeRTOS(1)
【stm32F7英雄联盟大赛】多功能测试仪器---------手把手教你移植EMWIN+FreeRTOS(2)
里面最重要的是修改GUI_config.h,GUI_config.c lcdconfig.c下填写好底层的打点函数读点函数填充函数
还有记得修改代码分散加载需要的文件有:
这是KEIL下分散加载文件
编辑修改成; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20012000 0x0003C000 { ; RW data
.ANY (+RW +ZI)
}
RW_RAM1 0xC0000000 UNINIT 0x00800000 { ; RW data
* (VRAM, GUI_RAM, GUIDEMO_STACK)
}
}
;LR_QSPI 0x90000000 0xFFFFFF {
;ER_QSPI 0x90000000 0xFFFFFF {
;*.o (.ExtQSPIFlashSection)
;}
;}
可以用这个将代码加载到外部的FLASH中
然后就是移植FREERTOS我也买了本FREERTOS的书来看还有就是一PDF的手册
FREERTOS 手册资料PDF版
FreeRTOS中文实用教程.pdf
(3.05 MB, 下载次数: 41)
--------------------------------------------------------------------------------------------------------------201512.21晚上
接着讲移植FREERTOS除了添加基本的文件外还要记得注释到两个中断因为这两个中断已经在FREERTOS了有了
注释掉下面
/*void SVC_Handler(void)
{
}*/
//void PendSV_Handler(void)
//{
//}
还有修改SysTick中断改为
void SysTick_Handler(void)
{
HAL_IncTick();
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
{
xPortSysTickHandler();
}
}还有就是修改PORTMACRO.H里面的数据类型
需要这些文件如图
GUI和系统移植我觉得要记录一下的就这么多,希望以后自己要用时再看看这帖子
然后接下来我是在看EMwin的API
我觉得最的重要的是要学习和搞懂他的回调机制和消息
又快断网了明天接着记录
--------------------------------------------------------2015 12 23晚
接着讲EMwin的回调机制吧
回调机制是 EmWin 的一个重要的特性和功能,WM 可在有或无回调例程(回调函数)时
使用,大多情况下最好使用回调。EmWin 为窗口和窗口对象(小工具)提供回调机制的根本
概念是一个事件驱动系统。因为在大多数窗口式系统中,其原理是控制流不仅仅是从用户程序
到图形系统,还要再通过用户程序提供的回调例程返回用户程序。此机制通常称为 “好莱坞原
则” ( “不要打电话给我们,我们会给你打电话的! ” ) ,窗口管理器需要它的主要目的是触发窗口
重绘。这与传统编程相反,但是它能利用窗口管理器的无效化逻辑。
回调例程不是必须使用的, 但是如果这样做, WM 会失去管理窗口重绘 (更新) 的能力。
也可能混合使用,例如让有些窗口使用回调,有些不使用。当然,如果窗口不使用回调机制,
则由应用程序负责更新其内容。
如果要使用回调渲染的话, 那么在调用函数 WM_CreateWindow()创建窗口之前必须先定义
一个回调函数, 然后在调用函数 WM_CreateWindow()创建窗口的时候将这个回调函数作为参数。
回调函数原型如下:
void callback(WM_MESSAGE * pMsg);
参数pMsg 指向类型 WM_MESSAGE 的数据结构指针
结构体 WM_MESSAGE 各个元素的含义如下表
-----------------------------------------------------------
数据类型 元素 描述
int MsgId 消息类型
WM_HWIN hWin 目标窗口
WM_HWIN hWinSrc 源窗口
void* Data,p 数据指针
int Data,v 数据值
--------------------------------------------------------------------------------------------
其中消息类型MsgId 有
1.系统定义的消息
WM_CREATE 窗口创建后立即发送,使窗口可以初始化并创建任何子窗口。
WM_DELETE 要删除窗口前发送,告诉窗口释放其数据结构(如果有)
WM_GET_ID 发送到窗口,请求窗口的 Id
WM_INIT_DIALOG 创建对话框后立即发送到对话框窗口。
WM_KEY 按下某个键后发送到当前包含焦点的窗口。
WM_MOVE 窗口移动后立即发送到窗口。
WM_NOTIFY_PARENT 告知父窗口,其子窗口中发生了某些改变。
WM_NOTIFY_VIS_CHANGED 窗口可见性更改时发送到窗口。
WM_PAINT 窗口变为无效并应重绘时,发送到窗口。
WM_POST_PAINT 最后一条 WM_PAINT 消息处理后发送到窗口
WM_PRE_PAINT 第一条 WM_PAINT 消息发出前发送到窗口
WM_SET_FOCUS 获得或失去输入焦点时发送到窗口。
WM_SET_ID 发送到窗口以更改窗口 Id。
WM_SIZE 窗口大小更改后发送到窗口。
WM_TIMER 定时器到期后发送到窗口。
2.指针输入设备(PID) 消息
WM_MOUSEOVER 指针输入设备接触到窗口轮廓时发送到窗口,仅在启用鼠标支持时发送。
WM_MOUSEOVER_END 指针输入设备已移出窗口轮廓时发送到窗口。仅在启用鼠标支持时发送。
WM_PID_STATE_CHANGED 按下状态已更改时,发送到指针输入设备指向的窗口。
WM_TOUCH 指针输入设备接触到处于按下状态的窗口轮廓时发送到窗口。
WM_TOUCH_CHILD 指针输入设备已接触到子窗口时发送到父窗口。
3.通知代码
WM_NOTIFICATION_CHILD_DELETED此通知消息将在某窗口被删除前,从该窗口发送到其父窗口。
WM_NOTIFICATION_CLICKED 此通知消息将在点击窗口后发送。
WM_NOTIFICATION_LOST_FOCUS 此通知消息将在窗口失去焦点时发送。
WM_NOTIFICATION_MOVED_OUT 此通知消息将在指针移出窗口并点击时发送。
WM_NOTIFICATION_RELEASED此通知消息将在被点击的小工具已被释放时发送。
WM_NOTIFICATION_SCROLL_CHANGED此通知消息将在附加的 SCROLLBAR(滚动条)小工具的滚动位置更改时发送。
WM_NOTIFICATION_SCROLLBAR_ADDED 此通知消息在将
WM_NOTIFICATION_SEL_CHANGED 此通知消息将在小工具选择已更改时发送。
WM_NOTIFICATION_VALUE_CHANGED此通知消息将在小工具的特定值已更改时发送。
4.用户定义的消息
WM_USER
应用程序可使用 WM_USER 常数来定义私人消息,通常形式为 WM_USER+X,其中 X 为整数值。
----------------------------------------------------
上面这些都是MsgId 可以为的值,用到较多的是WM_PAINT重绘窗口还有一个特别好用的WM_TIMER 定时器消息可以定时给窗口命令比如可以用他定时来重绘窗口
使用WM_CreateTimer(,,,);这个函数来生成定时器,还有用WM_NOTIFY_PARENT 来检测窗口上的小工具是否发生改变,比如来检测BUTTON是否被点击按了。
小工具也是一个窗口。
----------------------2015.12.23晚上