STMCU小助手
发布时间:2022-8-27 18:38
|
1. 移植前期准备5 K6 G4 a+ Z# J 上一部分我们已经成功移植搭建完成LVGL的关于visual studio2022的PC模拟器,所有的LVGL的驱动源码啥的都在Simulator文件内,这个文件是我们移植到stm32F103所必须的。& K% I1 V6 r8 ^" k6 h6 e; U 我们需要准备一个KEIL的工程,里面需要包含屏幕的驱动,SD卡的驱动以及其他的底层驱动,这个根据自己的需要去添加,其他的关于Stm32的教程有很多,这里不在过多啰嗦。 5 l% Z7 q4 M# u" V, P FATSF文件系统的移植主要是在未来创建项目时将界面所需的图片字库等大文件存放到内存卡中,减小Stm32的内存占用率,所以我们在移植LVGL文件之前把FATFS文件系统移植到项目中。 7 r' m( N3 ]" C4 ]0 U/ Y 注意:以后的keil工程的配置以及像源码移植的头文件包含到keil工程中的操作,如果没有特别需要注意的,后续不再提及,大家自己配置一下就好了。 2. keil配置) E- p$ ^" g" s2 k7 e% S% Q 下面是关于KEIL工程的建立的几个文件。 7 [3 j9 X* y k, S' d; Z( e6 [; b Libraries--Stm32的固件库 0 [. M) `8 M3 o+ }. A: u Project----KEIL工程项目 # C' Y. e, y% N# u3 |; }( F( E+ ~ Simulator--上一期建立的Visual studio2022的模拟器文件- ]/ k3 J1 G" h! N User--------外设驱动文件 ! g$ N, U6 ^* l1 q+ Y) P
USER文件夹内创建几个外设驱动 ?6 l: \) X7 @9 N- e2 R( D, V APP---后期可以添加界面文件1 n! L/ | x' W% C3 S ( [! r2 r {! Y* p- X BSP---LCD屏幕驱动、SD卡驱动、RTC配置* J- b# ^4 V ^4 |( T6 R$ A3 S$ h 9 U9 w" t$ Z% n% u LVGL-LVGL的屏幕驱动,输入驱动(触摸屏),SD卡驱动 5 R/ M" j k' _/ D FATFS--FATFS的文件系统源码用来管理SD卡文件 ) h$ p: M! [5 \; b- q1 E
3.FAFS移植 FatFs是用于小型嵌入式系统的通用FAT/exFAT文件系统模块。FatFs模块按照ANSIC(C89)编写,并与磁盘输入/输出层完全分离。因此,它独立于平台。它可以整合到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。此外,这里还提供了用于微型微控制器的Petit FatFs模块。 , ^( i0 M7 E4 y3 }1 ?7 D9 V FATFS有两个版本,一个大版本,一个小版本。小版本主要用于8位机(内存小)使用。我们这里使用大版本。 点击FatFs R0.14b进行下载。 6 O6 T k4 E7 E; J/ D
* o; H8 q; @; r5 P7 e1 [ 下载下来的FATFS源码的只有三个文件,这里我们只需要source文件夹下面的文件。 / c) U0 k2 y0 _! s6 D( U7 X! j8 @
我们需要将source文件夹内的所有.c和.h文件全部复制到KEIL工程的USER/FATFS文件下面。 4 d2 `# l' e# x9 g2 P; ?
ff.c FATFS模块,应用层源文件1 \6 T- P$ c( _- j7 h ffconf.h FatFs模块的配置文件,需要修改。& p" q2 v# e& i8 c. m+ X+ Q ff.h FATF和应用程序模块的通用包含文件。 diskio.h 常见包括FATF和磁盘输入/输出模块的文件。 diskio.c 将现有磁盘输入/输出模块连接到FATF的粘合功能示例,底层接口,需要修改。 , B* M6 t4 z- n7 W- d5 K# r5 [9 [ ffunicode.c 可选Unicode实用程序函数。, L! ]- l( L3 e/ `1 K , k: k5 n) [, L. x ffsystem.c 可选O/S相关函数的示例。 , [* D" N+ `4 n, B5 v 此存档中不包括低级磁盘输入/输出模块,因为FATF模块只是一个通用文件系统层,它不依赖于任何特定的储设备。我们需要提供SD卡的写入的低级别磁盘输入/输出模块控制连接到SD卡设备。 4.FATFS配置+ w( d5 X6 h }# V" T 将Fatfs文件夹内的文件添加到KEIL工程中。" E' [ w5 Q9 i- U* j
5 }" J$ l3 e9 b0 ]/ B2 k: T 我们只需要配置diskio.c, ffconf.h两个文件 4.1 diskio.c文件修改( n7 u4 C5 h* P8 f' U6 c 1) 添加SD卡驱动头文件2 L p/ t- r, s4 I( s 2)注释掉不需要的RAM,MMC,USB宏定义,添加新的SD卡宏定义# k* L, n: N" i9 G/ v
3)}修改 disk_status函数,这个函数主要是获取SD卡状态,不使用是直接返回RES_OK
4 e" c3 a( l- X- X( I3 j 4)修改disk_initialize 函数初始化SD卡驱动 返回值: 0:成功。1:失败0 w$ u) i9 e7 N% K7 s) X + ?+ d6 x' C$ q% o& K7 I. t
5)修改 disk_read 函数 SD卡读任意扇区的函数+ _, c' ^( D k4 S
6)修改 disk_write 函数 SD卡写任意扇区的函数 / x3 ^' q# i/ b
% [5 U" |+ \- R, F# u 7)修改 disk_ioctl 函数 填充ioctl命令功能。这些功能是标准的命令,在diskio.h有定义% i% y+ C( ^7 f; i+ G
4.2 ffconf.h 文件修改, U! V, l2 J& W% g# J 1)修改编码格式 FATFS支持多种文件编码格式,支持中文和英文 : f4 j2 h$ V% }- _3 f 我们只需要修改#define FF_CODEPAGE 936宏就可以,源码里面有编码格式对应的定义& m6 l# t% L. K$ m( J " J5 l0 \4 K$ h 将这个宏定义为936编译后发现代码占用空间特别大,比较移植之前RO Size 多了一百K/ X0 A: o7 ?6 U7 D3 a9 {
$ C9 X, p: F6 e' R2 } 而使用437后发现空间占用就比较小了,所以我们只需要将编码格式宏定义为437,SD卡内的文件夹和所有文件都命名为英文就可以了。 0 Q& v; p0 d8 G2 |6 L, `( L6 ]+ T* L
" w" U5 L2 o) y! F 2) 修改支持长文件名9 p5 C0 J: q8 {( K2 j, m; F. u 这一步需要实现动态内存分配函数在ffsystem.c文件增加 #include <stdlib.h>头文件! J2 O: D8 n& W7 x6 ?& h$ {( z; v 2 E6 C. J5 x; N' P& s* I7 D #define FF_USE_LFN 3 // 3:使用堆上的动态工作缓冲区启用LFN #define FF_MAX_LFN 255 + V+ Z: ~$ ^: r& ^ L 3)ff.h中添加时间获取函数 DWORD为32位的变量- n6 u0 m' U( }9 ]% A' f9 m* ? 31-25位:年/ t' t+ e1 @% S( ^0 ?1 u 24-21位:月 0 @+ j8 G0 L' B* H. Q 20-16位:日 15-11位:时 1 @; J2 L* l& f @" c( J # \ C7 K6 K0 \) e: [+ |+ ?2 D6 a$ f 10-5位:分钟 4-0位:秒& z6 }* J* Y4 ]7 B5 f, S- Z DWORD get_fattime(void) 4 T5 \& ~2 @. @, K% p {5 n/ [& a, s h3 l7 f# n) I - h- n4 t/ O/ R t; ] DWORD time = 0;6 f4 S' c# Q: c, A0 t8 F" s- k2 {! z RTC_Get(); ) X1 f4 G) G. r" L! r3 x0 C time = ( (7 F$ W/ @6 Q( i3 M# n 9 r% ]: Q# S& \8 N$ _0 ~, ? R2 T (calendar.w_year+20) << 25) |& Y+ f3 n' K/ G5 X! z( I9 H, b (calendar.w_month << 21 ) | N' e+ @' ^$ {9 N) C5 I; w" O (calendar.w_date << 16 ) | ( Q: M% T, r4 ?6 R& f4 h4 @$ a* j (calendar.hour << 11 ) | $ D/ L( ?7 h" j7 ~. H2 t (calendar.min << 5 ) |3 U6 `, g/ p* Z) s- T' G$ M+ @3 ]" W 9 ?3 _ t0 B3 D' I2 O' g+ m (calendar.sec )); 1 S% a0 X6 U3 M! u return time;- w- e9 L" T3 f; z' T' y4 J9 J S } 0 V ?% }) d2 H' d$ K 4)修改堆栈空间 + Q% P: [8 g! y$ y, _' r9 d- u/ y" v
) o. w, g/ A5 f( v 到此FATFS文件系统全部移植完成 4 f. t7 z, B: y; f$ A 作者:鹰头猫咪喵喵鱼 8 ~. \2 X5 \; b5 J R' r* i% m+ f' \" Y( z2 E# Y |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版