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

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

[复制链接]
donatello1996 发布时间:2019-1-4 09:41
    在上一帖中我忘记提及如何使用屋脊雀CMSISDAP下载器进行程序下载和TTL串口调试,本帖补上CMSISDAP串口驱动安装教程。  z+ C# e* b1 Y, n  U5 v
    首先如果安装了MDK5系列的话,DAP下载器的驱动是肯定会顺便安装上的,在工程的Debug界面下可以看到DAP下载器的配置:
. t) C/ m) K2 o2 h+ Y$ T, A$ I 7.jpg 4 t( k6 F! o' D( I% y5 b, K
这个非常简单,就不详细讲,先讲串口驱动安装,Windows系统默认是没有CMSISDAP驱动的,需要手动安装,屋脊雀提供的资料中带了CMSISDAP驱动,直接安装即可,首先要将usbser.sys文件放到C:\Windows\INF目录下覆盖:
7 r% u4 j0 ]1 |+ J( D) h; u' ? 8.jpg
. C) ]* D# R/ f% A2 K( l) ^然后将剩下的mdmcpq.inf和stmcdc.inf放到一个文件夹下,在设备管理器中安装,安装完毕之后即可识别:
# k. R0 }; _. j! U4 X 9.jpg   a# G8 L) e9 |" D# n5 K. j- W
为了方便大家,我将这三个文件打包发到论坛上:
8 @  @# h2 o+ Y( n: G1 P- }& G% ~$ g5 k3 d
! \9 c8 X9 k' i' U/ p, ]3 r! u
然后是SPI彩屏驱动,彩屏需要三根引脚,CLK MOSI CS,时钟,数据,片选,我一开始打算使用核心板上引出的SPI FLASH引脚(PB2 PB3 PB4)作为复用来驱动彩屏的,谁知道怎么都点不亮: 10.jpg 7 I+ e2 p0 C, N+ Y/ M6 E

; ^" @' \2 {) O6 P7 X! P
3 H& R: a( v' C
我又用了别的F407开发板(没有SPI器件引脚复用)作为对照,是可以点亮的,后面我就干脆不折腾了,直接用三根GPIO(PF9 PF11 PF13)模拟SPI时序来点亮液晶彩屏:. p- {% S" `' X9 t" c6 D2 N
11.jpg
. h0 s3 A) k% E( e8 B成功点亮了:# x' J, f/ J: u7 i6 p
IMG_20190104_094027.jpg # y+ c. I3 R( n& q% |* h
附上驱动代码:
0 x3 ?. x5 Y& {( w% X: Iunsigned char SPI1_ReadWriteByte(unsigned char txdata)2 O/ ~9 X5 P2 b/ r- D6 t
{
4 }8 l& Y5 f" A* M0 J/ Q! X        int  i;/ R( v& N6 o& t  Q& W7 h/ Z, R
        for(i=0;i<8;i++), q6 V, s$ U% i! ?5 ]
        {0 F) m7 V- R" P4 j' J5 X
                SPILCD_CLK_CLR;* @/ \% L9 L, t2 v# ^
                if(txdata&0x80)2 B; ?( _0 h! T& v$ ~8 Z/ g
                        SPILCD_DI_SET;
: n1 g% G' ?% E8 C$ P                else SPILCD_DI_CLR;
! |3 e, _  A& h9 {( v                SPILCD_CLK_SET;
* }. W( ^. X: J( R. [8 B                txdata<<=1;- b0 j3 I. b# Y- C+ j
        } 4 h9 y3 i1 }& ^
}       
' I$ {1 R" ^7 h) {2 l
! Z( ?" `8 E! T) b
3 t' Z3 ?( y0 j, }1 u
void SPILCD_Send_Command(unsigned char out_cmd)              
. y& H9 m) |- R  _' s; D{9 c8 [! o) T3 ]
        SPILCD_CS_CLR;
/ v' \- v6 A9 Y. D, Z) c        SPI1_ReadWriteByte(out_cmd);
! u* y& v8 Y1 O3 b# p: L- h* N        SPILCD_CS_SET;
1 |( e( e0 r2 V' S}
9 W+ A' [+ W1 g) V0 K8 r, W1 [6 u: n& V& |' `
2 J0 E4 K$ ?  B* {" q
void SPILCD_Send_Data(unsigned int out_data)           
: W$ H) n* ]/ {{/ X! [2 B9 a# ^  H6 U% g% I
        SPILCD_CS_CLR;
& z" q% A4 b" N& P        SPI1_ReadWriteByte(out_data>>8);! L( B& y( D- x% R0 F
        SPI1_ReadWriteByte(out_data);
3 }; Z5 d7 I  I. B" M* E        SPILCD_CS_SET;
4 Q, P- v$ L: z. ?; s}
, L% _$ @2 }3 o
* v3 Q, ^0 T. B, ~# c

! O/ p' q! U3 x2 w) [; R8 q
% q: k! S, f: ]* P
" x& u* ?8 S2 z! ]7 _% r# d
然后是SYSTICK延时,非常简单,参考原子的代码即可:
! y8 |9 H. y% {
' [/ R2 o) Q% D
' m3 H2 q% B/ h5 N
void Delay_us(int nus)
& _1 Y' F+ s8 t3 h{               
6 t& f4 G$ u! D( ^6 ^) \' O/ D  k        int temp;                     0 u. B$ |" R4 n
        SysTick->LOAD=nus*fac_us;
" t1 K8 k& z2 \+ w+ C- R        //时间加载                           
: \1 d+ r1 s0 d) n        SysTick->VAL=0x00;
/ W4 q4 Y# I+ r        //清空计数器! ]9 |$ T; E2 _6 Y
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
' d. v5 `4 t! L) F) g3 C; t4 x        //开始倒数          
) @, r/ t. e0 T! F' w! o  I        do1 _) K7 v! W5 N
        {1 |. K2 H8 ]3 p- s% n+ o
                temp=SysTick->CTRL;2 P: f0 h7 I/ }9 S# C7 m9 m" [0 e
        }while((temp&0x01)&&!(temp&(1<<16)));8 s/ c/ J5 i5 C) ~, l+ ~/ E
        //等待时间到达   
* t3 E% _. |* Z        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
& u8 f2 Q( o! y) }0 r) q) ~        //关闭计数器7 C9 y' v( b- ~1 q' |
        SysTick->VAL =0X00;
6 T- v$ E% P1 n, y0 ^        //清空计数器
# s# f) R; l% J/ F- ?  m}
+ S9 \$ Y# Q9 [) u6 u- B! h6 I. V; n3 J

+ \( `* D0 a$ t- O+ Uvoid Delay_ms(short nms)
& }) B+ W, z: U{                  
/ J9 w: K! _8 A- u8 s        unsigned char repeat=nms/540;
$ Q9 }, k& l3 }/ r* }        int temp;                ' t: Y0 i4 ^; Z3 h# O; s
        //这里用540,是考虑到某些客户可能超频使用,# N4 C; b7 x/ J0 J
        //比如超频到248M的时候,delay_xms最大只能延时541ms左右了" ~* Z! q  y- m8 w
        short remain=nms%540;
+ R  M2 o" w! ]9 h) @$ ?        while(repeat)( f# O. }& F0 X6 }" w  Z  x; v: R
        {
2 I/ n! e3 ]2 I3 u+ t                        SysTick->LOAD=(int)540*fac_ms;
% w0 A. G' S3 Q. W% j        //时间加载(SysTick->LOAD为24bit)
1 j7 {/ }0 B; M& {  I( V, r. p6 v        SysTick->VAL =0x00; 4 M/ v- _' ^0 b8 b. v
        //清空计数器6 D9 F# v0 t  A3 M
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
4 g5 T4 m: L$ [        //开始倒数
) k: Y: q/ j' {8 ?7 c        do, {+ I/ _; w* ^2 X7 A. t- a
        {: p; x# \, p6 c
                temp=SysTick->CTRL;' {+ q  D: P* q# S" }9 }
        }while((temp&0x01)&&!(temp&(1<<16)));  n% W! r% E% z, q/ y
        //等待时间到达   5 P/ Y3 l2 U( d6 ^
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;- O2 g$ {% N% n* |$ X. g
        //关闭计数器
& U- `7 \, \% J/ K: @' e4 P        SysTick->VAL =0X00;/ Y3 s0 T# z/ |5 ?" \' w
        //清空计数器        . L$ p0 f6 v2 Q! ~% Y
                repeat--;
. p- Y& S+ j+ O# H+ T" Z        }8 A8 x" s% h4 f* X* S# O& Q+ J3 W5 t
        if(remain)
7 _5 v* i5 T4 [1 V6 B+ h$ Z        {
( j! b8 S: }3 {5 z. V; c                SysTick->LOAD=(int)remain*fac_ms;
2 q) b* o6 E: k) @1 J# B                //时间加载(SysTick->LOAD为24bit). O3 |* k9 `8 O" Q( f( A  m
                SysTick->VAL =0x00; ) I% C; P  L+ r) Z
                //清空计数器
+ i8 Z( J/ L+ Y, K1 {                SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;" u4 i3 g& _3 E3 r
                //开始倒数
. b$ j; j# m3 H                do! D- T& i9 H5 L% r9 Z! g) O9 B! C5 M
                {
9 j* i! Z0 Z* A2 `                        temp=SysTick->CTRL;
5 O7 @" w: d4 e. t                }while((temp&0x01)&&!(temp&(1<<16)));4 X6 Y2 _1 h' D7 K* n
                //等待时间到达   . O' a2 T# A, u5 L# X
                SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
# X! F1 _* ?5 o" }2 K3 s/ r                //关闭计数器
& p3 T2 e1 z# e! m                SysTick->VAL =0X00;# }( S. W+ m+ ^3 |; u
                //清空计数器       
2 N1 r6 e0 ]( W9 L        }* m9 Y+ P5 d4 Y3 @$ t$ ]. R
}6 w/ p/ I& p  L( j
; e2 Q. c2 d, F! |* p
% \0 G. @0 F1 b( p$ N5 n; S9 p
上传工程文件:
( X* h/ L9 W& g. g) R- Q. U STM32F407ZGT6.zip (551.13 KB, 下载次数: 240)
收藏 评论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
8 W2 V" d% M( }5 v- z/ a这里想给屋脊雀工作室的设计者提个醒,最好能预留一组空的SPI引脚给用户用,尽量不要与已有的SPI器件复用。 ...

3 }5 F2 P; `/ B只要把两片FLASH的CS拉高,应该就可以用了。
wujique 回答时间:2019-1-4 21:39:54
zhdzhd-174422 发表于 2019-1-4 10:44
2 W! t- o8 x+ l3 o; @1 w6 [+ o! J2 v$ o可能空间有限或节约成本吧
! P1 x5 j4 G2 ^
不是节约成本,节约成本的话,就不会有两片FLASH了。
$ y7 C+ y8 w/ }. O1 首先是IO口没有那么多。3 U/ V" H# s' [. ?
2 多个设备共用SPI控制器本来就是我要模拟的情景。
/ F5 H  q4 c- q3 g$ `( H4 d+ |9 [) W* u6 Z3 |6 b1 k7 X4 q
根本上就是,这套板子,是为了我做软件开发教程而做的。
donatello1996 回答时间:2019-1-5 11:10:08
huangxuejia-292 发表于 2019-1-4 21:37# G$ W* ~' [# l) T
只要把两片FLASH的CS拉高,应该就可以用了。

& I/ A6 t$ h# I这点我也想到了,也拉高了,就是不行,我还用一个别的407板子来做空白对照,接在相同的PB2~PB4引脚上,是可以驱动的。
mmuuss586 回答时间:2019-1-5 13:08:00

1 T# P5 H" b  Z/ \& s$ F- B不错,感谢分享
berber 回答时间:2021-5-31 19:28:31
说了半天我是来找驱动的你打包的驱动呢9 j! r! w4 e- T/ q7 C- N

9 |% A% v1 _: [. N
龙泉火箭客 回答时间:2022-9-4 20:55:30
谢楼主分享资料谢楼主分享资料

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版