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

【屋脊雀F407开发板】CMSISDAP驱动安装&驱动SPI彩屏&SYSTICK

[复制链接]
donatello1996 发布时间:2019-1-4 09:41
    在上一帖中我忘记提及如何使用屋脊雀CMSISDAP下载器进行程序下载和TTL串口调试,本帖补上CMSISDAP串口驱动安装教程。
6 t  g2 n& Y0 m0 h    首先如果安装了MDK5系列的话,DAP下载器的驱动是肯定会顺便安装上的,在工程的Debug界面下可以看到DAP下载器的配置:
' {0 l! S4 ]# e- l3 C8 j5 x3 y 7.jpg 0 E; j( x- I! s2 y) A
这个非常简单,就不详细讲,先讲串口驱动安装,Windows系统默认是没有CMSISDAP驱动的,需要手动安装,屋脊雀提供的资料中带了CMSISDAP驱动,直接安装即可,首先要将usbser.sys文件放到C:\Windows\INF目录下覆盖:. I. m" d8 V' c- H
8.jpg 8 e2 y# t9 w. L3 c2 V
然后将剩下的mdmcpq.inf和stmcdc.inf放到一个文件夹下,在设备管理器中安装,安装完毕之后即可识别:) \  _$ Q! u# J7 J
9.jpg 2 K! A7 o0 F7 D  K" {2 G% Q
为了方便大家,我将这三个文件打包发到论坛上:
( [! v  m: V4 ^' b- |& V. m, N' {7 k+ A* l9 z- t* w

" {$ X9 O1 o- J* l然后是SPI彩屏驱动,彩屏需要三根引脚,CLK MOSI CS,时钟,数据,片选,我一开始打算使用核心板上引出的SPI FLASH引脚(PB2 PB3 PB4)作为复用来驱动彩屏的,谁知道怎么都点不亮: 10.jpg
! E: U/ e4 D- O7 y2 {7 n* Z- O
. [' {  s( n7 @
, c2 }6 T# X7 q, ~. W2 B" j
我又用了别的F407开发板(没有SPI器件引脚复用)作为对照,是可以点亮的,后面我就干脆不折腾了,直接用三根GPIO(PF9 PF11 PF13)模拟SPI时序来点亮液晶彩屏:2 i2 t/ y9 J- A& {/ l
11.jpg
7 U# _- r4 C* v( l: S6 g+ e* I成功点亮了:2 _3 x, [, Y5 k+ ?8 T
IMG_20190104_094027.jpg
7 a# `+ u) ~9 ?. O+ M附上驱动代码:
7 z/ O* {# f5 ?* k1 f' i$ Q; A" d- f# _unsigned char SPI1_ReadWriteByte(unsigned char txdata)0 @. b6 \2 T* z5 F5 ]- x
{. v: Q# V& {1 R0 M" K
        int  i;, V/ z2 k7 Y. _1 h
        for(i=0;i<8;i++)
% w* j- N- g, q+ k4 S) k7 u9 M        {
  S3 j1 ]. F6 o4 O7 u- i                SPILCD_CLK_CLR;2 C7 g: F9 S4 H+ [
                if(txdata&0x80)* W+ U& k( X* T& U7 s
                        SPILCD_DI_SET;
( L6 J, _; W- |% ~                else SPILCD_DI_CLR;
8 v- u6 B; X+ b# k( [                SPILCD_CLK_SET;( v5 a( r! E7 o7 S% m# S3 N
                txdata<<=1;
2 n. {3 e  _' a6 L% o* B; z2 T; v, q9 q& U        } / q1 a* x1 o& C5 l
}        * x- ^' }' a+ A0 E( d" N) C

7 |9 z3 n3 @9 ^* x. c$ Z

4 z! Y$ R0 e8 ovoid SPILCD_Send_Command(unsigned char out_cmd)              * ^4 ^$ S* P6 p6 ]1 F
{
3 H) `( @" V2 Q        SPILCD_CS_CLR;& s' J( a0 p  b* \# {3 c, y) k
        SPI1_ReadWriteByte(out_cmd);! R' @* w3 A! g& K4 z' F0 ^2 q
        SPILCD_CS_SET;
: J' @& U: N+ S5 Z, ^' ]}, ^, B! u5 |4 D6 K! N; ?
2 t: C- u* A% v6 H
& U' G9 z% ~0 ?: L% J; T
void SPILCD_Send_Data(unsigned int out_data)           : ]" I  S5 b5 X) Y2 ~# L) _. g
{
* X1 i' {( h' h  ]# Q        SPILCD_CS_CLR;
+ y6 J  a0 `+ g  z$ }7 W        SPI1_ReadWriteByte(out_data>>8);. d( e1 y( Z2 ?
        SPI1_ReadWriteByte(out_data);
7 f8 L0 N* F4 R$ O        SPILCD_CS_SET;
: B2 p1 |4 X/ ^& f8 U; o}# ?' J  @- g+ v5 p& p& _$ d

  i/ P& L' U7 Y* G6 R" q  W9 }

# G/ R3 N4 }6 ?9 B/ G
$ ?% o# N1 Y8 w- R9 t6 ?
  c/ V( k: V8 H) K
然后是SYSTICK延时,非常简单,参考原子的代码即可:/ J3 U3 e+ ^' ~2 e; O
3 G9 `8 p4 k* ?+ U9 D+ T& h6 d/ W
7 i! L* w7 c+ `3 I1 U2 B
void Delay_us(int nus)7 p0 r( M$ A! R2 {0 S
{               
/ }; q# z/ I% J' l' E        int temp;                     
2 p: h( x" b  n7 x& o$ B/ o        SysTick->LOAD=nus*fac_us;: g$ m9 |* ~2 ]6 A$ e# c3 Y' P
        //时间加载                           $ b4 K9 I# v: o
        SysTick->VAL=0x00; , z8 Z$ b1 c0 p: U
        //清空计数器
4 a/ d- L( a6 @3 V* B3 n' Z' K        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;# t0 i- m1 i* C3 y( l" L
        //开始倒数          
+ _# T& z% D: r" I        do: m% B2 M9 P: D9 N" y* q5 D
        {2 v8 U; N+ z4 k  _) A. S
                temp=SysTick->CTRL;* _0 R1 \8 \, P8 i6 A# ]0 ?
        }while((temp&0x01)&&!(temp&(1<<16)));2 g% O% q) b8 _( @& N. l
        //等待时间到达   
0 E. g  L/ w. }. q        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;8 P* K7 [" g6 T: s* P
        //关闭计数器' h' l; M! M% `' u
        SysTick->VAL =0X00;
- Q6 x# g5 t4 V; r) G        //清空计数器 $ V9 C, L! }0 R
}
$ ~/ R# H( }: q) _. c5 Y
6 {/ ]9 n8 n7 r8 Z
4 b* b; I7 r0 e* ?: W1 R. K" x7 g
void Delay_ms(short nms)
/ K3 G) K6 S# Y* X8 ]8 j{                  & u) @5 v- \" `/ \& X8 E+ ?$ Q
        unsigned char repeat=nms/540;
. v3 Q% Y' H1 w        int temp;               
% J2 H( R  R! j8 a. T( s        //这里用540,是考虑到某些客户可能超频使用,% u( e+ \$ t* K5 y5 r# q% _; T
        //比如超频到248M的时候,delay_xms最大只能延时541ms左右了
( S7 M) k1 o. d* x        short remain=nms%540;
3 J" R9 D: i& I7 S, x2 @        while(repeat)& |4 x, i4 |7 C# s  q
        {) `! D' e% Q  C* b4 z8 N; |
                        SysTick->LOAD=(int)540*fac_ms;4 ~9 P+ ]% P, x. ~# G# f- l
        //时间加载(SysTick->LOAD为24bit)
3 W" @. T/ ~1 k& q, T& @        SysTick->VAL =0x00; " o# i( [1 A5 D+ j% y
        //清空计数器
  N4 l, r& B0 p0 w! g% P4 e        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;* F, M, }* Z# D5 {% D, z
        //开始倒数
4 ^* _% [- W0 n, v9 P  P. A        do1 y  z9 J" K6 a+ F% H+ d
        {
# ]7 b+ m/ o: n: w" c# ~                temp=SysTick->CTRL;  Y5 r' Y: x7 V3 O# G' M
        }while((temp&0x01)&&!(temp&(1<<16)));
2 D2 H$ o5 E6 C        //等待时间到达   
3 I7 L- K0 I+ i        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
: h# l7 r: h% ^% k( K& \. e        //关闭计数器5 P+ r) W& m* _! q, h
        SysTick->VAL =0X00;
8 X( Y& G" M) K        //清空计数器       
8 H9 Y4 x8 x6 ~. y3 u& n                repeat--;: ]+ [( l$ c3 M& _2 c+ R
        }
8 O4 }% m( l) B" f) @        if(remain)" a) E) \, V/ H: i8 S
        {
4 Y9 s; `# X+ s                SysTick->LOAD=(int)remain*fac_ms;' _) ^- Q& `: W' r( M
                //时间加载(SysTick->LOAD为24bit)
5 ?% b3 p3 Q: F6 l& K                SysTick->VAL =0x00;
$ `. f0 U( Q  V5 ^                //清空计数器0 c! ?8 |1 O/ D/ t; O
                SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
  T/ S, ^4 Y* o$ \                //开始倒数 1 t. M. ^6 a! Y- a# L$ N) W* [8 R) B
                do; N$ ^/ D1 c8 J1 N0 U
                {% F- y# @6 a$ Z/ H
                        temp=SysTick->CTRL;
$ g2 ~4 X' p  _% A                }while((temp&0x01)&&!(temp&(1<<16)));
8 x- _; f7 F, v' [3 e, V( E8 `                //等待时间到达   6 K+ W4 Y& d7 `+ G
                SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
1 B9 W2 O' z# X& r                //关闭计数器( @% H, U4 u, K
                SysTick->VAL =0X00;
9 n/ b5 E0 h9 n" {! ]                //清空计数器        % c6 p! n; @6 V: G8 {" ?6 F1 c
        }
3 s/ @3 h8 U1 V& ~2 ]( d; O/ K$ k}- ?* ~- }/ p, b. g% U: q& g  \* a- [

8 ?# T& Y) V0 N- H% P
  [8 V' X# W7 B" [; M0 q
上传工程文件:
: X6 v5 I6 H" D" n! d STM32F407ZGT6.zip (551.13 KB, 下载次数: 250)
赞 收藏 评论8 发布时间:2019-1-4 09:41

举报

8个回答
donatello1996 回答时间:2019-1-4 10:15:19
这里想给屋脊雀工作室的设计者提个醒,最好能预留一组空的SPI引脚给用户用,尽量不要与已有的SPI器件复用。
zhdzhd 回答时间:2019-1-4 10:44:44
可能空间有限或节约成本吧
wujique 回答时间:2019-1-4 21:37:36
donatello1996 发表于 2019-1-4 10:15% l; Z' g; \, `1 ]% K1 N
这里想给屋脊雀工作室的设计者提个醒,最好能预留一组空的SPI引脚给用户用,尽量不要与已有的SPI器件复用。 ...

( L9 A( |6 U( {: H4 i% H) A只要把两片FLASH的CS拉高,应该就可以用了。
wujique 回答时间:2019-1-4 21:39:54
zhdzhd-174422 发表于 2019-1-4 10:44
) K5 C% _# N! C. R& m可能空间有限或节约成本吧

! d7 U$ [. k9 G4 u不是节约成本,节约成本的话,就不会有两片FLASH了。- U- E* O% `- H0 `, X# d
1 首先是IO口没有那么多。
7 b8 _2 Q! q8 k& H" ~: T9 Y2 多个设备共用SPI控制器本来就是我要模拟的情景。
0 H; x1 _* u. K( ~( R( Z
+ }( d: A. j4 T根本上就是,这套板子,是为了我做软件开发教程而做的。
donatello1996 回答时间:2019-1-5 11:10:08
huangxuejia-292 发表于 2019-1-4 21:377 Q; I; c& q2 u+ }
只要把两片FLASH的CS拉高,应该就可以用了。
6 O) U  i9 @! T; L+ I% P
这点我也想到了,也拉高了,就是不行,我还用一个别的407板子来做空白对照,接在相同的PB2~PB4引脚上,是可以驱动的。
mmuuss586 回答时间:2019-1-5 13:08:00
* O/ R% `) ?% X4 A' Y3 Q- O
不错,感谢分享
berber 回答时间:2021-5-31 19:28:31
说了半天我是来找驱动的你打包的驱动呢# T& j1 Z+ ]3 A# e- j: v

4 x3 r: _+ d: t" t
龙泉火箭客 回答时间:2022-9-4 20:55:30
谢楼主分享资料谢楼主分享资料

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版