|
STM32开发板很多,教程也很多,对于入门非常有帮助。 但是这些教程其实都是处于教学状态,特别是源码。 正好这段时间有空,决定整理一套有点用的源码。 目前所有硬件单模块测试已经完成。* E$ v, j2 B$ S$ i3 c: v8 K3 A d 决定放出来,希望有人能一起查BUG,一起完善。& H! T# d" {: C6 G( ]$ h O( m- f R 程序已经放到github,应该会长期维护。* K H( i( S) D$ } o3 z: K http://github.com/wujique/stm32f4074 j$ \6 J6 X5 z/ m3 L7 V) Q' n; f 资料下载: https://pan.baidu.com/s/1bHUVe6X6tymktUHk_z91cA* |% L" h! y6 O4 p+ Q, C0 f- V- j - ?1 c# M5 j. Y# \ /-------------------------------------------------------------/ 有以下特点: 1 基于实际项目思路,循序渐进开发驱动。 2 用驱动工程师视角,时刻考虑如何跟应用程序沟通,也就是提供什么接口。 3 很多驱动有一定设计,例如SPI,SPI FLASH,LCD驱动。1 O9 Y# o# s8 v$ `! g 4 除了官方库和一些开源库,所有代码都是重新设计开发。+ p$ w- L9 H' ]8 _ 5 代码开源,欢迎商用,但不保证没BUG,后果自负。具体见源码说明。+ H) t8 Q' Z3 @/ u 有一个缺点:6 ^4 b. X4 Y! U' Y 说明文档不详细,因为我主要想做一套能用的驱动代码, 而不是一套基础教程。( W) p$ O% w- B* `0 A' ]1 i /-------------------------------------------------------------/ 目前正在移植freetos,然后做一套完整的系统测试程序。9 `0 A) e# K n' r( ^0 O *******************************2 ^5 V/ Z1 d! N 后续会做系统优化整合:% _" d0 u0 \* T: f# k% i7 @, \% S* Q% { 1. 中断优先级统一管理 2. 源码优化& [" R" b& b: C0 l u7 A7 P9 t 3. 设备驱动框架-----将所有驱动统一 一套管理框架 ! V1 @+ i5 o0 t W& o 4. BOOT-CORE-APP,程序分三层的方法。: W7 N% Q! }9 P; E' u ****************************** 更长计划: 1 移植UBOOT的命令行功能。 2 移植ELUA; j( T' H. C% {( i 3 GCC 编译环境 ****************************** 下面这些功能有时间也会添加进去: T9拼音输入法 图片解码 MP3解码$ Y8 e" E/ v" `. D, K! @; t 视频解码& Q. l% m; U* C# |" e 二维码生成9 |( q) y+ D" `) T, [# [: c: h 二维码解码 5 Y) ?" f/ l: f! c ******************************2 x( W" M* u+ ]9 @ 如果还有时间,会慢慢添加不同外设的驱动进去。 例如当前物联网上流行的各种传感器。 /-----------------------------大概说明--------------------------------// O9 a" f. z7 v: {1 c 对每个驱动开发都做了大概说明,不过当前主要在写代码,文档属于草稿阶段
- 1.1 软硬件环境准备) ?% e5 O: h* J( f 拿到硬件就直接上电?不要相信硬件工程师,你会被电容爆炸声吓到的。; T. G% s3 m; M2 T- J - 1.2 开发环境优化与技能准备1 a n/ V, C) v+ |) f 你用什么软件编码:MDK自带环境?建议换一换,毕竟生产工具可以提高效率。 C语言咋样?会指针吧?! ]$ `2 k, z: m' }2 m - 1.3 基于标准库建立工程模板 标准库使用 - 2.1 IO口输出-流水灯-证明程序在运行: x' V8 @% F6 p* c; S LED,盲调的手段 - 2.2 串口-重要调试手段 Log需要管理。 中断和驱动程序如何衔接?' x5 D5 P+ C( C- _( W+ f! j2 c 中断函数有什么关键要求?+ O6 c; \, b& K' p - 2.3 IO输入-按键检测 如何去抖动?用Delay(10)防抖,浪费CPU生命。2 m1 W% q7 v, S) M5 P- a - 2.4 定时器-代码调度器-中断 中断大概执行流程# N# A9 }8 W: n3 Y L - 2.5 定时器-PWM-蜂鸣器, ]; f& |- u: T 定时器的第二功能& b% I7 @( H6 Y - 2.6 定时器-捕获-触摸按键 定时器第三功能) Q) }! T/ }- i; a3 I - 2.7 I2C-收音机-功放, s' f& A5 {3 e* d$ F2 w IO模拟I2C通信设计。 - 2.8 DAC-波形-声音的真相# U7 w2 G; W- G 简单的提示音播放。 - 2.9 SPI-SPI FLASH0 q" [6 ?) S+ n( \6 K SPI的特性是什么?怎么写SPI驱动?9 c5 T2 h$ R" m- s- F! S8 y 硬件SPI、模拟SPI两者如何统一接口? SPI FLASH驱动如何写?) n1 R% I% F2 _. I% f: f1 J 当有多个FLASH接在多个SPI上时,如何处理? - 2.10 SDIO-TF CARD+ ]% o* p8 D9 ]8 m0 M3 v+ S# W 如何参考官方例程? - 2.11 I2S-wm8978-音乐播放 - 2.12 FSMC-TFT LCD调试记录- s: B; u/ X& l# { LCD的特性是什么?如何抽象LCD的特性? 抽象特性,也就是提炼LCD接口。 - 2.13 ADC-TSLIB-电阻式触摸屏调试, K; [8 _2 w0 o2 h% S 触摸屏校准用什么算法?试试TSLIB吧。7 q' s0 U' e/ c! Y8 ~/ ] @ - 2.14 VSPI和XPT2046触摸控制芯片, \$ y; S- @0 y1 @& C8 A- x7 w 模拟SPI(VSPI)和硬件SPI接口统一? 你关心过触摸采样频率吗?快速画一根线,有断线?+ X1 g' |6 v7 s 如何减少XPT2046读数据时间? - 2.15 DCMI-摄像头功能调试& N9 j. i. T% l V v- b! T$ i2 ? - 2.16 USB 调试记录 HOST跟DEVICE接口分开也叫OTG?: F' N- h1 H( i5 Y! m9 Q* B$ N 我们只用一个micro 口,自设计OTG电源切换电路。, [/ H( ^7 J% x% I/ B - 2.17 ETH LAN8720 调试记录3 G/ n/ b) t. F9 T9 D$ u2 ` 移植官方例程。& J; D d% ^# _ - 2.18 can总线调试记录 简单的例程 - 2.19 RS485调试记录 RS485基于串口。6 L' C5 H# U* A' ~ 多个串口,驱动如何优化?' q( V, I7 u+ o - 2.20 RTC调试记录* M% K" s. Z' t: i6 S - 2.21 alloc-内存管理 为什么要内存管理?用什么算法? - 2.22 COG LCD 和OLED LCD 调试记录6 A- Z# d0 L+ w* Z0 F! R+ q9 u4 E+ z 与TFT LCD有什么不同和相同?能不能用相同的接口? - 2.23 模拟SPI控制COG LCD,I2C控制OLED LCD I2C、spi、模拟SPI,三种不同LCD接口?如何封装? 程序如何分层?LCD驱动如何灵活使用不同接口? e' j+ V* L) X) Q1 g! c2 m3 u 从LCD驱动拆分一层LCD接口层,以便实现一个LCD驱动对应多个硬件接口。 - 2.24 LCD驱动框架 能不能同时支持多个LCD? 例如:- p+ c* ~( N: c7 I; M8 O 一个TFTLCD接在8080,一个COG LCD接在VSPI,7 G, x8 r1 c, n$ b+ C# C8 n 一个OLED接在SPI,还有一个OLED接在I2C。 驱动怎么写?能不能用一套接口操作这些LCD?; j, w1 C8 T G) |9 ^ - 2.25 汉字字库 点阵跟LCD驱动是两个模块,不要交缠在一起。 - 2.26 WAV解码 语音播放中间层如何使用WM8978或者IS2接口? 提供什么接口给应用程序使用?$ U. \' C( i/ ]& q$ D. x5 \ - 2.27 I2S录音8 |) {; f/ ^( i, w0 V: a - 2.28 DAC SOUND 驱动改造--播放WAV文件 参考WM8978的播音架构设计DAC SOUND驱动,/ a Z* ]6 I& P 应用程序用相同接口,指定WM8978或DAC sound播放- S- x2 l/ [; ]! ]8 K0 w, G2 |! q - 2.29 详解矩阵按键扫描 # @3 _6 O& [/ n( @2 S9 j /----------------------------------------------------------/, R* t) a' J6 {; D: u' \4 g |
微信公众号
手机版
rt-thread功能比较强大。他还包含系统了。
我的目的比较简单:让学了开发板的人能再学一点真正开发中用到的软件开发技巧。0 l+ F7 K8 k, a4 C+ w) j
统一接口也不难,不要往大的方向靠,例如跑什么A7的大应用。往小的方向做,例如单片机。
以前用ZIGBEE做智能家居产品时,就将所有的传感器都用OPEN/CLOSE/WRITE/READ接口统一。
是的,最老的标准库。+ B" q7 j) Y( R
后面可能会迁移到GCC编译环境,就决定用这个库。
新的图形化配置,估计搞不到GCC