拿到板子挺长时间的了,工作较忙,周末把前段时间的关于stm32f429的做的一些实验梳理了一下。
本次开发日志,主要涉及以下几个方面:
1、rt-thread1.2.1基于stm32f429的移植;
2、建立两个线程,线程1使LD3与LD4依次点亮并同时熄灭,并把两个LED状态实时显示在液晶屏上;
3、邮箱的建立,把两个LED的状态传递给线程2,并打印输出。
一、 rt-thread1.2.1基于stm32f429的移植
rt-thread1.2.1基于stm32f429的移植的基础是rt-thread 1.2.1 bsp文件夹下的stm32f40x,在bsp文件夹下,把“stm32f40x”这个文件夹复制一份,并命名为“stm32f429”。
1. 把STM32F429I-Discovery_FW_V1.0.1\Libraries目录下的所有文件夹复制到stm32f429\Libraries文件夹下,并替换相应的文件。
2. 进入文件夹,打开名为“project.uvproj”的工程文件,将device修改为STM32F429ZI,如图1所示:
3. 设置一些预定义:
4. 按图3所示设置器件的flash:
5. 把stm32f4xx.h文件中的如下语句中的晶振由原来的25000000修改为8000000,如下所示:
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
6. 修改sdram和串口相关参数:
#define STM32_SRAM_SIZE 192
#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)
//#define RT_USING_UART1
#define RT_USING_UART1
//#define RT_USING_UART3
// Console on USART: no console USART 1 USART 2 USART 3
// <i>Default: 1
#define STM32_CONSOLE_USART 1
编译后排除相应的错误。
二、 建立两个线程,线程1使LD3与LD4依次点亮并同时熄灭,并把两个LED状态实时显示在液晶屏上
1. 把STM32F429I-Discovery_FW_V1.0.1\Utilities\文件夹下的common文件夹复制到stm32f429文件夹下,并把STM32F429I-Discovery_FW_V1.0.1\Utilities\STM32F429I-Discovery文件夹下的stm32f429i_discovery_lcd.c、stm32f429i_discovery_lcd.h、stm32f429i_discovery_sdram.c和stm32f429i_discovery_sdram.h等四个文件复制到stm32f429\drivers这个文件夹下,并在MDK中把这四个文件中的两个c文件添加到相应的group下。
2. 打开“application.c”,建立两个线程,线程1使LD3和LD4依次点亮,并在1秒钟同时熄灭,线程2从邮箱接收邮件,并把邮件内容通过串口1打印输出。
三、 邮箱的建立,把两个LED的状态传递给线程2,并打印输出。
邮箱设置为先进先出的方式,线程1在每次点亮或熄灭相应的LED灯时都通过邮箱把LED灯的状态发送出去,线程2一直在等待邮件的到来,在没有邮件是线程2是被阻塞的,直到线程1发送新的邮件。
相应的工程文件见附件。
串口打印数据,如下图所示:
在液晶屏上显示,如下面三张图所示:
这三张图片,其实是视频截图,视频已经上传至youku了,目前正在审核,审核通过后,会再将视频放上来。
更新视频:
player.youku.com/player.php/sid/XNzUwNDcwMDc2/v.swf
|