搜索
bottom↓
回复: 213

STM32+UCGUI手机界面,拼音输入法,文件浏览,BMP,指针时钟

  [复制链接]

出0入0汤圆

发表于 2013-6-21 23:02:00 | 显示全部楼层 |阅读模式
本帖最后由 xi_liang 于 2013-6-22 02:55 编辑







百为STM3210E-EVAL开发板完整版:


百为STM3210E-EVAL开发板精简版:


把开发板资源汇总一下:

原理图:
http://d1.ourdev.cn/bbs_upload78 ... ev_602958HX5VN1.pdf

我翻译的书《一个内幕者对STM32的介绍》
http://www.amobbs.com/thread-5530326-1-1.html

百为STM32开发板视频教程陆续更新中
http://www.amobbs.com/thread-5531370-1-1.html

视频教程目录:
1、百为STM32开发板功能介绍
2、百为STM32开发板原理图分析
3、STM32硬件设计入门
4、Cortex-M3深入理解1 《一个内幕者对STM32的介绍1》
5、Cortex-M3深入理解2 《一个内幕者对STM32的介绍2》
6、Cortex-M3深入理解3 《一个内幕者对STM32的介绍3》
7、Cortex-M3深入理解4 《一个内幕者对STM32的介绍4》
8、如何通过串口烧写STM32程序
9、如何通过JLINK烧写STM32程序
10、如何创建RealView MDK工程和如何通过RealView MDK下载程序
11、启动代码分析
12、LED流水灯
13、按键输入
14、RCC时钟控制
15、固件函数库介绍
16、LED流水灯(库函数)
17、17、SysTick系统定时器
18、STM32中断和事件
19、USART串口通信
20、RTC实时时钟
21、备份寄存器
22、独立看门狗
23、窗口看门狗
24、SPI串行通信
25、I2C温度传感器

STM32烧写方法汇总(串口,JLINK,DFU)
http://www.amobbs.com/thread-5526370-1-1.html

百为STM32开发板官方DEMO(SD卡版本)BMP浏览,U盘WAV播放
http://www.amobbs.com/thread-5536581-1-1.html

百为STM32+RT-thread网络收音机,可点播豆瓣音乐,播放SD卡MP3
http://www.amobbs.com/thread-5530151-1-2.html

stm32官方开发板86个测试例程
http://www.amobbs.com/thread-5503748-1-1.html

3D图形显示STM32版——源码及资料
http://www.amobbs.com/thread-5504122-1-1.html

stm32_gui_lib在百为stm32开发板上运行效果
http://www.amobbs.com/thread-5041599-1-1.html

完整源码版uCOSII2.86+uCGUI3.90在stm32上的移植,含uCGUI3.9源码(不是.lib)
http://www.amobbs.com/thread-4787247-1-1.html

做了个DM9000板,准备上STM32+DM9000+LWIP
http://www.amobbs.com/thread-5511065-1-1.html

STM32+FATFS+SDIO+helix 软解MP3成功了
http://www.amobbs.com/thread-5089622-1-1.html

音乐频谱基础 百为STM32开发板 官方FFT demo演示(源码+图)
http://www.amobbs.com/thread-5500240-1-1.html

stm32 uclinux 启动成功了,在stm32f103zet6开发板上验证
http://www.amobbs.com/thread-4439872-1-1.html

最完美的触摸屏校正算法tslib——STM32实现(源码+图)
http://www.amobbs.com/thread-5523786-1-1.html

百为STM32开发板播放I2S音频(PCM格式WAV文件)
http://www.amobbs.com/thread-5521405-1-1.html

在st_gui_lib上加了tsc2046触摸功能——百为STM32
http://www.amobbs.com/thread-5529369-1-1.html

百为STM32开发板UCOSII演示程序源码+图
http://www.amobbs.com/thread-5525265-1-1.html

STM32烧写方法汇总(串口,JLINK,DFU)
http://www.amobbs.com/thread-5526370-1-1.html

百为STM32开发板播放ADPCM
http://www.amobbs.com/thread-5521225-1-1.html

百为STM32开发板 RT-THREAD代码
http://www.amobbs.com/thread-5515652-1-1.html

百为STM32+emWin5.14图形界面演示程序
http://www.amobbs.com/thread-5532161-1-1.html

百为STM32开发板接摄像头大王wangguanfu的OV7670模块,源码+图
http://www.amobbs.com/thread-5522203-1-1.html

开贴研究STM32 WIFI,打造2013年最酷的贴
http://www.amobbs.com/thread-5513966-1-1.html

百为STM32裸机+WM-G-MR-09 WIFI + LWIP源码--全球首发
http://www.amobbs.com/thread-5534196-1-1.html






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-6-21 23:13:03 | 显示全部楼层
难道是沙发么?

出0入0汤圆

发表于 2013-6-21 23:16:14 | 显示全部楼层
呵呵,楼主牛逼啊,学习利器啊!!!

出0入0汤圆

发表于 2013-6-21 23:23:44 | 显示全部楼层
顶顶顶顶

出0入0汤圆

 楼主| 发表于 2013-6-22 00:14:50 | 显示全部楼层
heyangfengyue 发表于 2013-6-21 23:13
难道是沙发么?

随便坐,招呼不到

出0入0汤圆

 楼主| 发表于 2013-6-22 00:15:07 | 显示全部楼层
lncwangfeilnc 发表于 2013-6-21 23:23
顶顶顶顶

有你帮顶这里会更精彩

出0入0汤圆

发表于 2013-6-22 09:00:58 | 显示全部楼层
看看

出0入0汤圆

发表于 2013-6-22 09:07:47 | 显示全部楼层
就凭楼主坚持做好自己的板子,而且一直在努力的执着,必须顶一下,相信楼主会做的更好。

出0入0汤圆

发表于 2013-6-22 09:07:55 | 显示全部楼层
不错!界面很漂亮

出0入0汤圆

发表于 2013-6-22 09:09:07 | 显示全部楼层
界面很强大啊,是用UCGUI做的?

出0入0汤圆

发表于 2013-6-22 09:12:28 | 显示全部楼层
感觉好酷,支持楼主

出0入0汤圆

发表于 2013-6-22 09:15:52 | 显示全部楼层
不错很漂亮         

出0入0汤圆

发表于 2013-6-22 09:31:41 | 显示全部楼层
帮顶。
看来楼主要大发神威了。

出0入0汤圆

发表于 2013-6-22 09:44:16 | 显示全部楼层
楼主,你做过UCOS读写IIC(24C64)吗?
慢速。

出0入0汤圆

发表于 2013-6-22 10:11:17 来自手机 | 显示全部楼层
挺炫的,回去试试。哈哈

出0入0汤圆

发表于 2013-6-22 10:31:25 | 显示全部楼层
能否开源啊,呵呵

出0入0汤圆

发表于 2013-6-22 11:12:15 | 显示全部楼层
这个必须得顶,界面很好,比我之前做的漂亮多了

出0入0汤圆

发表于 2013-6-22 12:30:37 | 显示全部楼层
好强悍,看看先

出0入17汤圆

发表于 2013-6-22 12:48:58 | 显示全部楼层
很好很强大

出0入0汤圆

发表于 2013-6-22 13:32:15 | 显示全部楼层
很漂亮!!

出0入0汤圆

发表于 2013-6-22 13:48:04 来自手机 | 显示全部楼层
绝对支持楼主  板子非常漂亮

出0入0汤圆

发表于 2013-6-22 14:05:50 | 显示全部楼层
LZ看起来不错,顶一下

出0入0汤圆

发表于 2013-6-22 15:00:07 | 显示全部楼层
默默的顶起,准备自己做一个玩玩  mp3 嘎嘎

出0入17汤圆

发表于 2013-6-22 18:31:22 | 显示全部楼层
ucgui终于见到一个漂亮的界面了~~~~~~~~~~~

出0入0汤圆

发表于 2013-6-22 18:46:43 | 显示全部楼层
楼主啊,你给做的板子太漂亮,资料又这么全,我想山寨一下,咋办?

出0入0汤圆

 楼主| 发表于 2013-6-22 19:09:49 | 显示全部楼层
292302877 发表于 2013-6-22 09:09
界面很强大啊,是用UCGUI做的?

是用UCGUI做的

出0入0汤圆

 楼主| 发表于 2013-6-22 19:11:10 | 显示全部楼层
Excellence 发表于 2013-6-22 09:44
楼主,你做过UCOS读写IIC(24C64)吗?
慢速。

没做过,不过UCOS读写I2C和裸机差不多吧,任务时间不要太长就是了,长的话要延时让其他任务可以执行

出0入0汤圆

 楼主| 发表于 2013-6-22 19:40:11 | 显示全部楼层
heyangfengyue 发表于 2013-6-22 18:46
楼主啊,你给做的板子太漂亮,资料又这么全,我想山寨一下,咋办?

我几乎疯掉的在继续做这个板,之所以更新例程的速度这么快,是因为我放弃了半年的休息日,没有白天只有黑夜,
累计投入时间也有一两年了,另外这个板广告费已经投入了近万元,板的元件成本又是比其他板高几倍的,
可是销量还是比不上那些成本几十元卖两三百元的,如果有人山寨我也不知道怎么办,相信老天不会对我这么残忍吧。

出0入20汤圆

发表于 2013-6-22 19:43:30 | 显示全部楼层
不是一般的厉害。

出0入25汤圆

发表于 2013-6-22 19:44:04 | 显示全部楼层
界面很漂亮,楼主厉害!!!

出0入0汤圆

发表于 2013-6-22 19:52:45 | 显示全部楼层
xi_liang 发表于 2013-6-22 19:40
我几乎疯掉的在继续做这个板,之所以更新例程的速度这么快,是因为我放弃了半年的休息日,没有白天只有黑 ...

哈哈,仅凭我个人力量想山寨你的精品,只是玩笑而已;如果某些团队要山寨的话,也只是在你团队之后,所以你放心,不会有人山寨你现在的精品。你只不过是哪个巨人,在你之后会有很人站在你的肩膀上,而已!!

出0入0汤圆

发表于 2013-6-22 19:53:43 | 显示全部楼层
很多人。。。掉了个字

出0入0汤圆

 楼主| 发表于 2013-6-22 20:04:58 | 显示全部楼层
heyangfengyue 发表于 2013-6-22 19:52
哈哈,仅凭我个人力量想山寨你的精品,只是玩笑而已;如果某些团队要山寨的话,也只是在你团队之后,所以 ...

呵呵,如果有人山寨我高价采购,等于生产外包了,这样也不错

出0入0汤圆

发表于 2013-6-22 21:38:30 | 显示全部楼层
顶,不错。继续支持

出0入0汤圆

发表于 2013-6-22 21:44:51 | 显示全部楼层
楼主很厉害  顶一个

出0入0汤圆

 楼主| 发表于 2013-6-23 09:54:21 | 显示全部楼层
shpan_111 发表于 2013-6-22 21:38
顶,不错。继续支持

多谢支持,顶起

出0入0汤圆

发表于 2013-6-23 10:07:31 | 显示全部楼层
这界面看着蛮舒服...

出0入0汤圆

发表于 2013-6-23 10:34:03 来自手机 | 显示全部楼层
好东西顶起

出0入0汤圆

发表于 2013-6-23 10:46:35 | 显示全部楼层
帮顶。
看来楼主要大发神威了。

出0入0汤圆

发表于 2013-6-23 11:25:10 | 显示全部楼层
上面图片的代码放出来没

出0入0汤圆

发表于 2013-6-23 11:45:16 | 显示全部楼层
楼主源码在哪里?

出0入0汤圆

 楼主| 发表于 2013-6-23 21:25:31 | 显示全部楼层
回16楼,40楼,41楼,等PDF教程弄好就开源

出0入0汤圆

发表于 2013-6-23 21:34:57 | 显示全部楼层
有亮点,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-23 21:47:22 | 显示全部楼层
这也太NB了,让我等自以为会STM32的怎么活。

出0入0汤圆

发表于 2013-6-24 00:20:43 | 显示全部楼层
真是有精力啊~

出0入0汤圆

发表于 2013-6-24 00:26:33 来自手机 | 显示全部楼层
原来STM32可以做到这么好。。

出0入0汤圆

发表于 2013-6-24 07:18:23 来自手机 | 显示全部楼层
买楼主板子,质量没的說,服午也好,也要移植ucgui 了,能否给个如何移植的说明,谢谢

出0入0汤圆

发表于 2013-6-24 08:26:29 | 显示全部楼层
学习,学习!!!!

出0入0汤圆

发表于 2013-6-24 08:37:53 | 显示全部楼层
楼主要完善文档和教程了,好让初学者更容易入门,根据自己的板子要把楼主开源的列程都提供一个移植的说明和板子一起销售的话,这样板子就更好卖的

出0入0汤圆

发表于 2013-6-24 08:53:37 | 显示全部楼层
好东西顶起

出0入17汤圆

发表于 2013-6-24 09:39:57 | 显示全部楼层
经典,玩的酷B~~~~~~~~~~

出0入0汤圆

发表于 2013-6-24 11:23:04 | 显示全部楼层

不错!界面很漂亮

出0入0汤圆

发表于 2013-6-24 11:37:57 | 显示全部楼层
漂亮,顶一下楼主

出0入0汤圆

 楼主| 发表于 2013-6-25 01:58:05 | 显示全部楼层
ersha4877 发表于 2013-6-24 07:18
买楼主板子,质量没的說,服午也好,也要移植ucgui 了,能否给个如何移植的说明,谢谢 ...

ucgui移植有几个步骤:
1、UCOS移植:
这个官方已经提供了,即Micrium-ST-uCOS-II-LCD-STM32,在开发板光盘里对应的是:
百为stm32开发板光盘\ucosii\Micrium-ST-uCOS-II-LCD-STM32\Micrium\Software\EvalBoards\ST\STM3210E-EVAL\RVMDK\OS-Probe\STM3210E-EVAL-OS-Probe.uvproj

在这个工程基础上增加UCGUI就可以了

2、下载UCGUI源码UCGUI390a,把UCGUI代码加入工程:

先选择Add Group创建组

把创建的New Group组改名为uCGUI/gui/AntiAlias
用同样的方法创建uCGUI/gui/ConvertColor等组,然后把UCGUI390a\Start\GUI目录下的对应C文件添加到对应的组上
这里创建组是为了阅读方便,不是必需的。如下图:


3、增加LCD驱动接口LCDDriver.c
实现UCGUI的LCD接口,主要是实现下面LCD_L0_XXXX这些函数,因为上层画点画线画图形最终调用的都是这些函数:
   LCD_L0_Init,
    (tLCDDEV_DrawBitmap*)LCD_L0_DrawBitmap,
    LCD_L0_DrawHLine,
    LCD_L0_DrawVLine,
    LCD_L0_FillRect,
    LCD_L0_GetPixelIndex,
    LCD_L0_SetPixelIndex,
    LCD_L0_XorPixel,
    LCD_L0_SetLUTEntry,

但最简单的方法不是每个函数重新去编写,按照LCDWin.c来修改比较快,
在LCD_L0_Init初始化时增加调用9320 LCD初始化代码STM3210E_LCD_Init();
把LCDSIM_SetPixelIndex改名为ili9320_SetPixelIndex
把LCDSIM_GetPixelIndex改名为ili9320_GetPixelIndex

然后在底层ili9320_lcd.c里增加以下三个函数
void ili9320_SetPixelIndex(u16 Xpos, u16 Ypos, u16 c)
{

  LCD_SetCursor(Xpos, Ypos);
  LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
  LCD_WriteRAM(c);

}

u16 ili9320_GetPixelIndex(u16 Xpos, u16 Ypos)
{
  u16 c;
  LCD_SetCursor(Xpos, Ypos);
  c = LCD_ReadRAM();
  return(ili9320_BGR2RGB(c));
}

u16 ili9320_BGR2RGB(u16 c)
{
  u16 r,g,b;
  u16 rgb;
  b = (c>>0) & 0x1f;
  g = (c>>5) & 0x3f;
  r = (c>>11) & 0x1f;
  rgb = (b<<11) + (g<<5) + (r<<0);
  return( rgb );
}

4、在GUI_X_Touch.c里增加触摸驱动接口
主要是实现读触摸坐标的两个函数:
int  GUI_TOUCH_X_MeasureX(void) {
  U32 i,j=0;
  for(i=0;i<10;i++)
  {
    j+=SPI_TOUCH_Read_X();
  }
       
  return j/10;
}

int  GUI_TOUCH_X_MeasureY(void) {
  U32 i,j=0;
  for(i=0;i<10;i++)
  {
    j+=SPI_TOUCH_Read_Y();
  }
       
  return j/10;
}

#define TOUCH_X_MeasureX   GUI_TOUCH_X_MeasureX
#define TOUCH_X_MeasureY   GUI_TOUCH_X_MeasureY

在GUI_TOUCH_Exec里面会默认调用上面两个函数采样坐标并转换,然后调用_StoreUnstable -> GUI_TOUCH_StoreUnstable ……
-> GUI_PID_StoreState存储触摸按下状态。

然后在WM_Exec -> WM_Exec1里会调用 WM_pfHandlePID -> WM_HandlePID - > GUI_PID_GetState获取出触摸按下状态并发送到相应窗口处理


在app.c里增加一个UCOS任务,在里面不断地调用GUI_TOUCH_Exec处理触摸消息
static  void  App_TaskKbd (void *p_arg)
{
    ……

    while (DEF_TRUE) {
    ……
    GUI_TOUCH_Exec();
    OSTimeDlyHMSM(0, 0, 0, 20);
    }
}


5、在GUI_X_uCOS.c里增加UCOS和UCGUI之间的接口:

void GUI_X_ExecIdle (void)
{
    OS_X_Delay(1);
}
改为
void GUI_X_ExecIdle (void)
{
    GUI_X_Delay(1);
}

实现下面几个空函数,作为打印调试信息等用途
void GUI_X_Log(const char *s)
{

}

void GUI_X_Warn(const char *s)
{

}

void GUI_X_ErrorOut(const char *s)
{

}

6、增加UCOS任务,在里面调用UCGUI DEMO任务MainTask:
static  void  App_TaskUserIF (void *p_arg)
{
    ……
   
    while(1)
    {
        MainTask();
    }
}

MainTask任务如下,使用UCGUI前先调用 GUI_Init初始化UCGUI,然后运行UCGUI DEMO:

void MainTask(void) {
  GUI_Init();
  while(1) {
    GUIDEMO_main();
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-25 10:56:26 | 显示全部楼层
顶,挺不错的。。

出0入0汤圆

发表于 2013-6-25 11:26:20 | 显示全部楼层
谢谢,不过没有学过那个RTOS 系统,不知道裸跑GUI 的程序怎么跑

出0入57汤圆

发表于 2013-6-25 11:30:56 | 显示全部楼层
记号!!!!

出0入0汤圆

 楼主| 发表于 2013-6-25 11:48:09 | 显示全部楼层
ersha4877 发表于 2013-6-25 11:26
谢谢,不过没有学过那个RTOS 系统,不知道裸跑GUI 的程序怎么跑

建议还是把UCOS先学一学吧,没有OS的多任务,跑GUI很别扭的

出0入0汤圆

发表于 2013-6-25 11:56:45 | 显示全部楼层
支持一下,收藏一下 哈哈 楼主 牛人!!!

出0入0汤圆

发表于 2013-6-25 12:07:25 | 显示全部楼层
真心不错,学习了

出0入0汤圆

发表于 2013-6-25 13:56:31 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2013-6-25 16:07:36 | 显示全部楼层
mark,膜拜楼主!

出0入0汤圆

发表于 2013-6-25 16:12:14 | 显示全部楼层
精品,我顶!!!

出0入0汤圆

发表于 2013-6-25 17:45:59 | 显示全部楼层
给楼主顶一个

出0入0汤圆

发表于 2013-6-25 22:12:38 | 显示全部楼层
最关心楼主的界面是怎么用UCGUI设计出来的~坐等楼主把资料发全后开源~得好好学习下~

出0入0汤圆

发表于 2013-6-25 22:23:27 | 显示全部楼层
感觉好酷,支持楼主

出0入102汤圆

发表于 2013-6-25 23:11:14 | 显示全部楼层
准备学习GUI,应该很有用

出0入0汤圆

发表于 2013-6-26 22:09:41 来自手机 | 显示全部楼层
mark《》《

出0入0汤圆

发表于 2013-6-27 11:55:36 | 显示全部楼层
一定要买

出0入0汤圆

发表于 2013-6-27 12:02:06 | 显示全部楼层
能不能换成STM32F40的芯片

出0入0汤圆

发表于 2013-6-27 16:53:14 | 显示全部楼层

出0入0汤圆

发表于 2013-6-27 20:54:49 | 显示全部楼层
期待楼主有更多精彩资源分享!!

出0入0汤圆

发表于 2013-6-28 09:52:40 | 显示全部楼层
mark下,顶楼主

出0入0汤圆

发表于 2013-6-28 10:56:57 | 显示全部楼层
高手,太牛了,收藏。

出0入0汤圆

发表于 2013-6-28 17:55:35 | 显示全部楼层
买过了,正在测试中,板子挺漂亮

出0入0汤圆

发表于 2013-6-28 18:09:51 | 显示全部楼层
xi_liang 发表于 2013-6-22 19:40
我几乎疯掉的在继续做这个板,之所以更新例程的速度这么快,是因为我放弃了半年的休息日,没有白天只有黑 ...

老大真心牛X

出0入0汤圆

发表于 2013-6-29 00:55:28 | 显示全部楼层
本帖最后由 LIXUPENGMDK 于 2013-6-29 00:56 编辑

时钟界面不错

出0入0汤圆

发表于 2013-6-29 11:55:51 | 显示全部楼层
界面做得不错

出0入34汤圆

发表于 2013-6-30 16:31:29 | 显示全部楼层
ersha4877 发表于 2013-6-25 11:26
谢谢,不过没有学过那个RTOS 系统,不知道裸跑GUI 的程序怎么跑

给您一个裸跑 GUI 的参考:

先自己造一个 10ms 的 Timetick 其中断会执行下面这个函数(可以放置于您的 Main.c 内):
  1. extern int OS_TimeMS;

  2. void Timer(void)
  3. {
  4.         TouchExe();
  5.         OS_TimeMS++;
  6. }
复制代码
后再找出 GUI 中的 GUI_X.c 并加入到您的 Project 内,并移除掉原先的那个 GUI_X_uCOS.c
要请您在您的这个 GUI_X.c 内的一些函数设置如下(很多 Remark 的说明我都移除了,只列出关键部份,您照改即可!):
  1. #include "GUI.h"
  2. #include "GUI_X.h"

  3. int GUI_X_GetTime(void) {
  4.   return OS_TimeMS;
  5. }

  6. void GUI_X_Delay(int ms) {
  7.   int tEnd = OS_TimeMS + ms;
  8.   while ((tEnd - OS_TimeMS) > 0);
  9. }

  10. void GUI_X_Init(void) {}

  11. void GUI_X_ExecIdle(void) {}

  12. void GUI_X_Log     (const char *s) { GUI_USE_PARA(s); }
  13. void GUI_X_Warn    (const char *s) { GUI_USE_PARA(s); }
  14. void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
复制代码
最后再看看您的 GUI_X.h 内配置是否与下方的一致(同样其 Remark 的部份我都移除了):
  1. #ifndef  GUI_X_H
  2. #define  GUI_X_H

  3. #include "GUI.h"

  4. #if defined(__cplusplus)
  5. extern "C" {
  6. #endif

  7. void GUI_X_Init(void);

  8. void GUI_X_ExecIdle(void);

  9. int  GUI_X_GetTime(void);
  10. void GUI_X_Delay(int Period);

  11. void GUI_X_Unlock(void);
  12. void GUI_X_Lock(void);
  13. U32  GUI_X_GetTaskId(void);
  14. void GUI_X_InitOS(void);

  15. void GUI_X_WaitEvent(void);
  16. void GUI_X_SignalEvent(void);

  17. void GUI_X_Log(const char *s);
  18. void GUI_X_Warn(const char *s);
  19. void GUI_X_ErrorOut(const char *s);

  20. #if defined(__cplusplus)
  21.   }
  22. #endif
  23. #endif
复制代码
至此,只要您的 Timetick 能正常运作的话,这 GUI 也应该可以跑得起来了...

出0入0汤圆

发表于 2013-6-30 16:44:04 | 显示全部楼层
MARK,不错,不过现在的STM32的开发板很多

出0入0汤圆

发表于 2013-6-30 16:47:59 | 显示全部楼层
有程序吗?

出0入0汤圆

发表于 2013-7-2 19:01:25 | 显示全部楼层
xyz543 发表于 2013-6-30 16:31
给您一个裸跑 GUI 的参考:

先自己造一个 10ms 的 Timetick 其中断会执行下面这个函数(可以放置于您的 Ma ...

谢谢,现在又要开始学习GUI 了,谢谢提供的资料

出0入0汤圆

发表于 2013-7-2 22:11:43 来自手机 | 显示全部楼层
收藏,手机mark   

出0入0汤圆

发表于 2013-7-2 22:12:09 来自手机 | 显示全部楼层
收藏,手机mark   

出0入34汤圆

发表于 2013-7-3 09:25:27 | 显示全部楼层
ersha4877 发表于 2013-7-2 19:01
谢谢,现在又要开始学习GUI 了,谢谢提供的资料

不客气,祝您学习顺利...

出0入0汤圆

发表于 2013-7-3 12:34:24 | 显示全部楼层
界面挺好的,顶起

出0入0汤圆

发表于 2013-7-4 10:25:43 | 显示全部楼层
楼主好样的,这里可以学到很多东西,楼主可不可以指点下要怎样学好gui啊?

出0入0汤圆

发表于 2013-7-4 16:38:00 | 显示全部楼层
这个的MARK一下

出0入0汤圆

发表于 2013-7-4 20:09:11 | 显示全部楼层
stm32学习利器

出0入0汤圆

发表于 2013-7-4 21:35:44 | 显示全部楼层
LZ犀利呀,学习了!

出0入0汤圆

发表于 2013-7-4 21:56:50 | 显示全部楼层
一个多月没怎么逛论坛,一上来就看到好东西了。

出0入0汤圆

 楼主| 发表于 2013-7-6 15:13:02 | 显示全部楼层
百为SIM900开发板还在焊接中,UCGUI手机界面加上了SIM900打电话功能
另外给这个系统起了个名字,暂且就叫做BPhone吧


SIM900打电话源码:
gsm.c
/**
*****************************百为技术有限公司*********************************
作者:张锡良
时间:2013年5月10日
技术支持论坛;www.stm32bbs.com
官方淘宝网店: http://baiweijishu.taobao.com
*******************************STM32技术论坛**********************************
**/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#include <stddef.h>
#include <string.h>
#include <ucos_ii.h>
#include "GUI.h"
#include "ff.h"
#include "gsm.h"

#define        USARTx                                 USART2
#define        RCC_APB1Periph_USARTx                  RCC_APB1Periph_USART2
#define        GPIOx                                  GPIOA
#define        RCC_APB2Periph_GPIOx                  RCC_APB2Periph_GPIOA
#define        GPIO_TxPin                            GPIO_Pin_2
#define        GPIO_RxPin                                  GPIO_Pin_3

#define        GPIO_PWR                                                                        GPIOB
#define        GPIO_PIN_PWR                                                        GPIO_Pin_0


void GSM_lowlevel_Init()
{
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_PIN_PWR;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIO_PWR, &GPIO_InitStructure);

  /* Configure USARTx_Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_TxPin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOx, &GPIO_InitStructure);

  /* Configure USARTx_Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_RxPin;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOx, &GPIO_InitStructure);       

/* USARTx configuration ------------------------------------------------------*/
  /* USARTx configured as follow:
        - BaudRate = 115200 baud  
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
  */
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No ;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  
  /* Configure the USARTx */
  USART_Init(USARTx, &USART_InitStructure);
  /* Enable the USARTx */
  USART_Cmd(USARTx, ENABLE);
}

int GSM_Init()
{
        char command[]="AT\x0d\x0a";
        char echo_off_command[]="ATE0\x0d\x0a";
        char buf[50];         
       
        GSM_lowlevel_Init();

        GPIO_SetBits(GPIO_PWR,GPIO_PIN_PWR);
        GUI_Delay(1500);               
        GPIO_ResetBits(GPIO_PWR,GPIO_PIN_PWR);

        ATCommand_Send(command);
        ATCommand_Receive(buf, sizeof(buf));
        if(strstr(buf, "OK") == 0)
        {
                printf("gsm init ok!\n\r");
        }
        else
        {
                printf("gsm init error!\n\r");
                return FALSE;
        }       
       
//        ATCommand_Send(echo_off_command);
//        ATCommand_Receive(buf, sizeof(buf));
//        if(strstr(buf, "OK") == 0)
//        {
//                printf("gsm set echo off ok!\n\r");
//        }
//        else
//        {
//                printf("gsm set echo off error!\n\r");
//                return FALSE;
//        }       
       
        return TRUE;                         
}

void ATCommand_Send(char* buf)
{
        printf("%s",buf);
        while(*buf)
        {
                USART_SendData(USARTx, *buf++);
    /* Loop until the end of transmit */
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET)
    {
//                        GUI_Delay(1);
    }
        }
}

void ATCommand_Receive(char* buf, int bufLen)
{
        int index;
        GUI_Delay(10);
        while(index < bufLen)
        {
    /* Loop until the USARTx Receive Data Register is not empty */
    while(USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET)
    {
//                        GUI_Delay(1);
    }
                buf[index++] = USART_ReceiveData(USARTx) & 0xFF;
        }
        buf[index] = '\0';
        printf("%s\n\r",buf);
}

void GSM_DialNumber(char* number)
{
        char command[50];
        char buf[50];
        GSM_Init();
        GUI_Delay(2000);
        memset(command,0,sizeof(command));
        sprintf(command, "ATD%s;", number);
        strcat(command,"\x0d\x0a");
        ATCommand_Send(command);
        ATCommand_Receive(buf, sizeof(buf));       
}

出0入0汤圆

发表于 2013-7-6 15:40:18 | 显示全部楼层
mark一下

出0入0汤圆

 楼主| 发表于 2013-7-8 12:14:34 | 显示全部楼层
挂断电话:
void GSM_Hangup()
{
        char command[] = "ATH\r\n";
        char buf[50];
        ATCommand_Send(command);
        ATCommand_Receive(buf, sizeof(buf));       
}

出0入0汤圆

 楼主| 发表于 2013-7-8 12:21:26 | 显示全部楼层
本帖最后由 xi_liang 于 2013-7-8 12:33 编辑

发送英文短信:
void GSM_SendSMS_Text(char* phoneNumber, char* message)
{
        char command[50];
        char buf[100];
        char textCoding[] = "\"GSM\"";
        U8 pduMode = 1;        //text mode

        memset(command,0,sizeof(command));
        sprintf(command, "AT+CMGF=%d\r\n", pduMode);
        ATCommand_Send(command);       
        ATCommand_Receive(buf, sizeof(buf));
        if(strstr(buf, "OK"))
                printf("set text mode = TEXT ok!\n\r");

        memset(command,0,sizeof(command));
        sprintf(command, "AT+CSCS=%s\r\n", textCoding);
        ATCommand_Send(command);               
        ATCommand_Receive(buf, sizeof(buf));
        if(strstr(buf, "OK"))
                printf("set text coding = GSM ok!\n\r");

        memset(command,0,sizeof(command));
        sprintf(command, "AT+CMGS=\"%s\"\r\n", phoneNumber);
        ATCommand_Send(command);
        ATCommand_Receive(buf, sizeof(buf));
        GUI_Delay(100);       

        strcat(message, "\x01a");        //send ctrl+z
        ATCommand_Send(message);
        GUI_Delay(100);
        ATCommand_Receive(buf, sizeof(buf));       
        if(strstr(buf, "+CMGS:"))
                printf("send sms in txt mode ok!\n\r");               

}

出0入0汤圆

发表于 2013-7-8 12:34:23 | 显示全部楼层
MARK                        

出0入0汤圆

 楼主| 发表于 2013-7-8 23:55:41 | 显示全部楼层
百为STM32+SIM900发送PDU中英文短信1

参考文档:
SMS_PDU-mode.pdf
sim900_sms_app_note.pdf
PDU短信编程的问题大概有10年了吧.pdf

发送PDU中英文短信,主要是下面几条AT命令:
AT+CMGF=0 //设置为PDU模式,与TEXT模式区分
AT+CMGS=<length> <CR>
<pdu> <Crtl/Z>

其中lendth是指TPDU的字节数,SMSC排除在外。
pdu是指SMSC和TPDU的组合

SMSC的结构如下:
Address-Length  //1字节,SMSC结构长度
Type-of-Address //1字节,通常为91
Address-Value    //多字节,Address-Length的值 = Type-of-Address的长度 + Address-Value的长度

其中Type-of-Address 的格式如下:


最高位固定为1,第4~6位为Type-of-number,定义如下:
Bits 6 5 4
0 0 0 Unknown1
0 0 1 International number2
0 1 0 National number3
1 1 1 Reserved for extension
第0~3位为Numbering-plan-identification,定义如下:
Bits 3 2 1 0
0 0 0 0 Unknown
0 0 0 1 ISDN/telephone numbering plan (E.164/E.163)
1 1 1 1 Reserved for extension

Bit 7 = 1,Bits 6 5 4 = 001,Bits 3 2 1 0 = 0001,所以Type-of-Address  = 0x91


TPDU结构如下:
First-Octet (M) //1字节
TP-MR (M)
TP-DA (M)
TP-PID (M)
TP-DCS (M)
TP-VP (O)
TP-UDL (M)
TP-UD (O)

其中First-Octet (M)结构如下:


TP-RP表示应答路径,0 不设置 1设置
TP-UDHI表示用户数据头标识,0 不含任何头部信息 1 包含头部信息
TP-SRR表示是否需要状态报告,0 需要报告,1 不需要报告
TP-VPF表示有效期格式, 00 不提供 01 预留 10 整型(标准) 11 提供8位字节的一半
TP-RD表示是否拒绝相同重复的消息, 0 接受 1 拒绝
TP-MTI 当SMS-SUBMIT时必须为01

这里设置First-Octet为0x11

TP-MR:消息参考值,设为0
TP-DA:同SMSC结构,除了Address-Length值 = Address-Value的长度这个不一样
TP-PID,定义如下:


Bits 7 6
0 0 Assigns bits 0..5 as defined below
0 1 See GSM 03.40 TP-PID complete definition
1 0 Reserved
1 1 Assigns bits 0-5 for SC specific use
The bit 5 indicates telematic interworking:
value = 0 : no interworking, but SME-to-SME protocol
value = 1 : telematic interworking
Bits 4 3 2 1 0
0 0 0 0 0 Implicit
0 0 0 0 1 telex (or teletex reduced to telex format)
0 0 0 1 0 group 3 telefax
0 0 1 0 0 voice telephone (i.e. conversion to speech)
0 0 1 0 1 ERMES (European Radio Messaging System)
0 0 1 1 0 National Paging system (known to the SC
1 0 0 0 1 any public X.400-based message handling system
1 0 0 1 0 Internet Electronic Mail

这里TP-PID设为 0

TP-DCS,定义如下:


bit 7 = 0 and bit 6 = 0 表示通用的编码
Bit 5, 0表示text不压缩,1表示text压缩

Bit 3 Bit2 Alphabet:
0 0 Default alphabet
0 1 8 bit
1 0 UCS2 (16bit)
1 1 Reserved

Bit 1 Bit 0 Message Class
0 0 Class 0
0 1 Class 1 Default meaning: ME-specific.
1 0 Class 2 SIM specific message
1 1 Class 3 Default meaning: TE specific (see GSM TS 07.05)

这里TP-DCS设为0x08

TP-VP:有效期。如果没有TP-VP结构,First-Octet结构里的TP-VPF设为0
TP-UDL:用户数据长度,即TP-UD的长度
TP-UD:用户数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-9 10:14:34 | 显示全部楼层
很强大,学习下

出0入0汤圆

发表于 2013-7-9 10:25:57 | 显示全部楼层
ucgui可以做的这么漂亮啊

出0入0汤圆

发表于 2013-7-9 12:43:19 | 显示全部楼层
哇靠,板子看起挺漂亮的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-2 14:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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