
STM32开发板很多,教程也很多,对于入门非常有帮助。 但是这些教程其实都是处于教学状态,特别是源码。 正好这段时间有空,决定整理一套有点用的源码。 目前所有硬件单模块测试已经完成。 决定放出来,希望有人能一起查BUG,一起完善。 程序已经放到github,应该会长期维护。 http://github.com/wujique/stm32f407 资料下载: https://pan.baidu.com/s/1bHUVe6X6tymktUHk_z91cA /-------------------------------------------------------------/ 有以下特点: 1 基于实际项目思路,循序渐进开发驱动。 2 用驱动工程师视角,时刻考虑如何跟应用程序沟通,也就是提供什么接口。 3 很多驱动有一定设计,例如SPI,SPI FLASH,LCD驱动。 4 除了官方库和一些开源库,所有代码都是重新设计开发。 5 代码开源,欢迎商用,但不保证没BUG,后果自负。具体见源码说明。 有一个缺点: 说明文档不详细,因为我主要想做一套能用的驱动代码, 而不是一套基础教程。 /-------------------------------------------------------------/ 目前正在移植freetos,然后做一套完整的系统测试程序。 ******************************* 后续会做系统优化整合: 1. 中断优先级统一管理 2. 源码优化 3. 设备驱动框架-----将所有驱动统一 一套管理框架 4. BOOT-CORE-APP,程序分三层的方法。 ****************************** 更长计划: 1 移植UBOOT的命令行功能。 2 移植ELUA 3 GCC 编译环境 ****************************** 下面这些功能有时间也会添加进去: T9拼音输入法 图片解码 MP3解码 视频解码 二维码生成 二维码解码 ****************************** 如果还有时间,会慢慢添加不同外设的驱动进去。 例如当前物联网上流行的各种传感器。 /-----------------------------大概说明--------------------------------/ 对每个驱动开发都做了大概说明,不过当前主要在写代码,文档属于草稿阶段 ![]() - 1.1 软硬件环境准备 拿到硬件就直接上电?不要相信硬件工程师,你会被电容爆炸声吓到的。 - 1.2 开发环境优化与技能准备 你用什么软件编码:MDK自带环境?建议换一换,毕竟生产工具可以提高效率。 C语言咋样?会指针吧? - 1.3 基于标准库建立工程模板 标准库使用 - 2.1 IO口输出-流水灯-证明程序在运行 LED,盲调的手段 - 2.2 串口-重要调试手段 Log需要管理。 中断和驱动程序如何衔接? 中断函数有什么关键要求? - 2.3 IO输入-按键检测 如何去抖动?用Delay(10)防抖,浪费CPU生命。 - 2.4 定时器-代码调度器-中断 中断大概执行流程 - 2.5 定时器-PWM-蜂鸣器 定时器的第二功能 - 2.6 定时器-捕获-触摸按键 定时器第三功能 - 2.7 I2C-收音机-功放 IO模拟I2C通信设计。 - 2.8 DAC-波形-声音的真相 简单的提示音播放。 - 2.9 SPI-SPI FLASH SPI的特性是什么?怎么写SPI驱动? 硬件SPI、模拟SPI两者如何统一接口? SPI FLASH驱动如何写? 当有多个FLASH接在多个SPI上时,如何处理? - 2.10 SDIO-TF CARD 如何参考官方例程? - 2.11 I2S-wm8978-音乐播放 - 2.12 FSMC-TFT LCD调试记录 LCD的特性是什么?如何抽象LCD的特性? 抽象特性,也就是提炼LCD接口。 - 2.13 ADC-TSLIB-电阻式触摸屏调试 触摸屏校准用什么算法?试试TSLIB吧。 - 2.14 VSPI和XPT2046触摸控制芯片 模拟SPI(VSPI)和硬件SPI接口统一? 你关心过触摸采样频率吗?快速画一根线,有断线? 如何减少XPT2046读数据时间? - 2.15 DCMI-摄像头功能调试 - 2.16 USB 调试记录 HOST跟DEVICE接口分开也叫OTG? 我们只用一个micro 口,自设计OTG电源切换电路。 - 2.17 ETH LAN8720 调试记录 移植官方例程。 - 2.18 can总线调试记录 简单的例程 - 2.19 RS485调试记录 RS485基于串口。 多个串口,驱动如何优化? - 2.20 RTC调试记录 - 2.21 alloc-内存管理 为什么要内存管理?用什么算法? - 2.22 COG LCD 和OLED LCD 调试记录 与TFT LCD有什么不同和相同?能不能用相同的接口? - 2.23 模拟SPI控制COG LCD,I2C控制OLED LCD I2C、spi、模拟SPI,三种不同LCD接口?如何封装? 程序如何分层?LCD驱动如何灵活使用不同接口? 从LCD驱动拆分一层LCD接口层,以便实现一个LCD驱动对应多个硬件接口。 - 2.24 LCD驱动框架 能不能同时支持多个LCD? 例如: 一个TFTLCD接在8080,一个COG LCD接在VSPI, 一个OLED接在SPI,还有一个OLED接在I2C。 驱动怎么写?能不能用一套接口操作这些LCD? - 2.25 汉字字库 点阵跟LCD驱动是两个模块,不要交缠在一起。 - 2.26 WAV解码 语音播放中间层如何使用WM8978或者IS2接口? 提供什么接口给应用程序使用? - 2.27 I2S录音 - 2.28 DAC SOUND 驱动改造--播放WAV文件 参考WM8978的播音架构设计DAC SOUND驱动, 应用程序用相同接口,指定WM8978或DAC sound播放 - 2.29 详解矩阵按键扫描 /----------------------------------------------------------/ |
rt-thread功能比较强大。他还包含系统了。
我的目的比较简单:让学了开发板的人能再学一点真正开发中用到的软件开发技巧。
统一接口也不难,不要往大的方向靠,例如跑什么A7的大应用。往小的方向做,例如单片机。
以前用ZIGBEE做智能家居产品时,就将所有的传感器都用OPEN/CLOSE/WRITE/READ接口统一。
是的,最老的标准库。
后面可能会迁移到GCC编译环境,就决定用这个库。
新的图形化配置,估计搞不到GCC