你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

能用的单片机驱动源码

[复制链接]
wujique 发布时间:2018-4-24 17:12
STM32开发板很多,教程也很多,对于入门非常有帮助。
5 P3 N$ k& u! N2 \但是这些教程其实都是处于教学状态,特别是源码。
4 \2 s( b+ B5 Y+ e. P正好这段时间有空,决定整理一套有点用的源码。
; P2 O& O" k) h/ i  H" u目前所有硬件单模块测试已经完成。* 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
资料下载:
, h$ r0 t( M1 `https://pan.baidu.com/s/1bHUVe6X6tymktUHk_z91cA* |% L" h! y6 O4 p+ Q, C0 f- V- j
- ?1 c# M5 j. Y# \
/-------------------------------------------------------------/
3 Z+ W5 l; Z$ S1 T: E有以下特点:
( ?# S6 W) ?: V4 z) z1 [" x4 u1 基于实际项目思路,循序渐进开发驱动。
- e9 A' F% V) H% O( N$ Y2 用驱动工程师视角,时刻考虑如何跟应用程序沟通,也就是提供什么接口。
* t$ Z& t. d( ~4 {! X) r( ]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
说明文档不详细,因为我主要想做一套能用的驱动代码,
" R# O& D- l. |9 X* d& |* t而不是一套基础教程。( W) p$ O% w- B* `0 A' ]1 i
/-------------------------------------------------------------/
1 W  t7 ~7 f! Q" P$ W& P$ x目前正在移植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. 中断优先级统一管理
5 X! ]3 h3 I* @+ M) R2. 源码优化& [" R" b& b: C0 l  u7 A7 P9 t
3. 设备驱动框架-----将所有驱动统一 一套管理框架
2 v6 Q8 M' L5 L: O9 V! V1 @+ i5 o0 t  W& o
4. BOOT-CORE-APP,程序分三层的方法。: W7 N% Q! }9 P; E' u
******************************
5 J9 _/ t- U" n3 X! t更长计划:
0 M7 }, ]) C* }9 `* w! M1 移植UBOOT的命令行功能。
3 T1 x! F0 H! _! m& t2 移植ELUA; j( T' H. C% {( i
3 GCC 编译环境
* M. q) R' ?4 ?& `0 i. \1 p******************************
9 Z' s9 |) N$ Q下面这些功能有时间也会添加进去:
2 v! j: N% F7 E2 X! eT9拼音输入法
$ S* S! ]/ n& Y5 P1 m  \! |/ p图片解码
" R) \6 b3 s6 R& l+ wMP3解码$ Y8 e" E/ v" `. D, K! @; t
视频解码& Q. l% m; U* C# |" e
二维码生成9 |( q) y+ D" `) T, [# [: c: h
二维码解码
2 Z1 V3 F! w# b( u9 E5 Y) ?" f/ l: f! c
******************************2 x( W" M* u+ ]9 @
如果还有时间,会慢慢添加不同外设的驱动进去。
, K5 ~( X& w- t- g2 P0 N3 f例如当前物联网上流行的各种传感器。
; J* t0 p: O! K* f  l$ ]/-----------------------------大概说明--------------------------------// O9 a" f. z7 v: {1 c
对每个驱动开发都做了大概说明,不过当前主要在写代码,文档属于草稿阶段
( v/ b2 u! e( F 123.JPG / }( _; u% Y& F' h) P, [- D
- 1.1 软硬件环境准备) ?% e5 O: h* J( f
拿到硬件就直接上电?不要相信硬件工程师,你会被电容爆炸声吓到的。; T. G% s3 m; M2 T- J
- 1.2 开发环境优化与技能准备1 a  n/ V, C) v+ |) f
你用什么软件编码:MDK自带环境?建议换一换,毕竟生产工具可以提高效率。
. ?5 y: z0 _3 d% |4 JC语言咋样?会指针吧?! ]$ `2 k, z: m' }2 m
- 1.3 基于标准库建立工程模板
) r$ i# H/ y5 u标准库使用
/ ?+ I: d& j  H& l. c8 `, J- 2.1 IO口输出-流水灯-证明程序在运行: x' V8 @% F6 p* c; S
LED,盲调的手段
0 M& K" I6 c" u% T- i- 2.2 串口-重要调试手段
! M. _  i$ W; t; a/ T; _3 h1 [# mLog需要管理。
; U8 h/ q( L. n$ `中断和驱动程序如何衔接?' x5 D5 P+ C( C- _( W+ f! j2 c
中断函数有什么关键要求?+ O6 c; \, b& K' p
- 2.3 IO输入-按键检测
2 g% {$ G. Y% N( V4 g. m1 o如何去抖动?用Delay(10)防抖,浪费CPU生命。2 m1 W% q7 v, S) M5 P- a
- 2.4 定时器-代码调度器-中断
4 x7 l% b4 c5 V8 U* `! g中断大概执行流程# N# A9 }8 W: n3 Y  L
- 2.5 定时器-PWM-蜂鸣器, ]; f& |- u: T
定时器的第二功能& b% I7 @( H6 Y
- 2.6 定时器-捕获-触摸按键
  O: x6 y  I, Z& ]定时器第三功能) Q) }! T/ }- i; a3 I
- 2.7 I2C-收音机-功放, s' f& A5 {3 e* d$ F2 w
IO模拟I2C通信设计。
. w2 w% Y& L1 H. |- 2.8 DAC-波形-声音的真相# U7 w2 G; W- G
简单的提示音播放。
% L: n  J5 f8 v  R1 {- 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两者如何统一接口?
$ S0 |; ]# [& S' x9 G3 oSPI FLASH驱动如何写?) n1 R% I% F2 _. I% f: f1 J
当有多个FLASH接在多个SPI上时,如何处理?
2 ]) m+ ]* }8 ^3 v% N2 \- 2.10 SDIO-TF CARD+ ]% o* p8 D9 ]8 m0 M3 v+ S# W
如何参考官方例程?
$ ]3 {( R0 V6 \/ }" w- 2.11 I2S-wm8978-音乐播放
% S3 J9 b0 ~# Q: t% i' a- 2.12 FSMC-TFT LCD调试记录- s: B; u/ X& l# {
LCD的特性是什么?如何抽象LCD的特性?
! g8 Q6 s- K/ f# ~+ K: z抽象特性,也就是提炼LCD接口。
: I' l- [6 b3 P. ]8 z' S- 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接口统一?
1 q% W8 f) H9 J# x; G- H+ j4 E你关心过触摸采样频率吗?快速画一根线,有断线?+ X1 g' |6 v7 s
如何减少XPT2046读数据时间?
3 u  G: [: k3 J- f& `- 2.15 DCMI-摄像头功能调试& N9 j. i. T% l  V  v- b! T$ i2 ?
- 2.16 USB 调试记录
( y* K  }1 h7 U+ |- \" \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总线调试记录
, k3 k) c- E( X+ \! r简单的例程
- a8 _6 o% c' K- 2.19 RS485调试记录
8 j9 ?) @3 c6 R8 V- ~# w! ?) aRS485基于串口。6 L' C5 H# U* A' ~
多个串口,驱动如何优化?' q( V, I7 u+ o
- 2.20 RTC调试记录* M% K" s. Z' t: i6 S
- 2.21 alloc-内存管理
3 z! Z" ~' g7 T% g/ I" p  A为什么要内存管理?用什么算法?
; h( d4 S4 |: X- 2.22 COG LCD 和OLED LCD 调试记录6 A- Z# d0 L+ w* Z0 F! R+ q9 u4 E+ z
与TFT LCD有什么不同和相同?能不能用相同的接口?
7 X; v0 c* k; R2 v$ M' J; C( Y- 2.23 模拟SPI控制COG LCD,I2C控制OLED LCD
) o2 G9 N/ H3 `I2C、spi、模拟SPI,三种不同LCD接口?如何封装?
# K. H! W$ L$ _, E0 U5 ~& U程序如何分层?LCD驱动如何灵活使用不同接口?  e' j+ V* L) X) Q1 g! c2 m3 u
从LCD驱动拆分一层LCD接口层,以便实现一个LCD驱动对应多个硬件接口。
; P1 m+ r( l. Z- 2.24 LCD驱动框架
& Y! c" @# o, p" }' Q: w能不能同时支持多个LCD?
( N  l5 ?$ \6 G例如:- 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。
" t; \1 }: b5 j驱动怎么写?能不能用一套接口操作这些LCD?; j, w1 C8 T  G) |9 ^
- 2.25 汉字字库
5 k! D6 b4 P* a" Z点阵跟LCD驱动是两个模块,不要交缠在一起。
( J) J5 ?* d+ v8 i7 y# F8 P. q- 2.26 WAV解码
; i; M2 X: K$ ?1 X9 K9 h/ x( \5 ]语音播放中间层如何使用WM8978或者IS2接口?
" R; F1 J3 P& ?6 |0 [  P8 D提供什么接口给应用程序使用?$ U. \' C( i/ ]& q$ D. x5 \
- 2.27 I2S录音8 |) {; f/ ^( i, w0 V: a
- 2.28 DAC SOUND 驱动改造--播放WAV文件
- z: F- F8 ]5 z- J' U参考WM8978的播音架构设计DAC SOUND驱动,/ a  Z* ]6 I& P
应用程序用相同接口,指定WM8978或DAC sound播放- S- x2 l/ [; ]! ]8 K0 w, G2 |! q
- 2.29 详解矩阵按键扫描
  c# ~# N' g; D5 Q# @3 _6 O& [/ n( @2 S9 j
/----------------------------------------------------------/, R* t) a' J6 {; D: u' \4 g
赞 收藏 评论6 发布时间:2018-4-24 17:12

举报

6个回答
黑皮男 回答时间:2018-4-25 07:47:15
楼主可以借鉴一下rt-thread,采用驱动和应用分离的设计模式会更好,难度也就大一些,开发统一的驱动接口会有一定的难度,带来的优势是驱动的更改,对应用层的影响会更小
wujique 回答时间:2018-4-25 08:53:24
黑皮男 发表于 2018-4-25 07:47
+ l9 ^( R# y7 k楼主可以借鉴一下rt-thread,采用驱动和应用分离的设计模式会更好,难度也就大一些,开发统一的驱动接口会有 ...

: F# c3 d. e6 n* `  wrt-thread功能比较强大。他还包含系统了。
1 ~6 L3 ^/ Q6 L! O: ~1 Z! R$ |& ?我的目的比较简单:让学了开发板的人能再学一点真正开发中用到的软件开发技巧。0 l+ F7 K8 k, a4 C+ w) j
统一接口也不难,不要往大的方向靠,例如跑什么A7的大应用。往小的方向做,例如单片机。
( F) d+ R8 p9 d# Z! O以前用ZIGBEE做智能家居产品时,就将所有的传感器都用OPEN/CLOSE/WRITE/READ接口统一。
anobodykey 回答时间:2018-4-25 09:13:41
楼主加油,这工作量应该不小
myccl 回答时间:2018-4-25 09:50:09
是用标准库写的吗?
wujique 回答时间:2018-4-25 10:29:41
myccl 发表于 2018-4-25 09:501 @- L6 J" O- D# ~) N
是用标准库写的吗?
" b) y# J  ~& z6 O/ h
是的,最老的标准库。+ B" q7 j) Y( R
后面可能会迁移到GCC编译环境,就决定用这个库。
' f( _1 R; E5 L0 K! E+ l' |新的图形化配置,估计搞不到GCC
勿忘心安110 回答时间:2018-6-26 08:48:13
支持楼主
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版