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

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

[复制链接]
donatello1996 发布时间:2019-1-4 09:41
    在上一帖中我忘记提及如何使用屋脊雀CMSISDAP下载器进行程序下载和TTL串口调试,本帖补上CMSISDAP串口驱动安装教程。
4 g# L( Y- L8 j( F) W    首先如果安装了MDK5系列的话,DAP下载器的驱动是肯定会顺便安装上的,在工程的Debug界面下可以看到DAP下载器的配置:
. a* D4 X' y& i9 e4 }* L6 B 7.jpg ! f9 w* k, A6 A) ~
这个非常简单,就不详细讲,先讲串口驱动安装,Windows系统默认是没有CMSISDAP驱动的,需要手动安装,屋脊雀提供的资料中带了CMSISDAP驱动,直接安装即可,首先要将usbser.sys文件放到C:\Windows\INF目录下覆盖:" p' {# {* C+ b: k* h: y: B. C
8.jpg
+ m% a3 z  }2 v2 Y( K$ S4 x+ _然后将剩下的mdmcpq.inf和stmcdc.inf放到一个文件夹下,在设备管理器中安装,安装完毕之后即可识别:
4 H- [, \! Z: D 9.jpg
$ n8 J2 n" q3 b$ K1 F$ t  H为了方便大家,我将这三个文件打包发到论坛上:
1 c2 L* l8 `; H* _) g* v+ Q0 t5 F  e6 ]7 z% ^6 F, U- e# _
2 l  E5 d: b' P1 S; F$ c# v% V
然后是SPI彩屏驱动,彩屏需要三根引脚,CLK MOSI CS,时钟,数据,片选,我一开始打算使用核心板上引出的SPI FLASH引脚(PB2 PB3 PB4)作为复用来驱动彩屏的,谁知道怎么都点不亮: 10.jpg , a7 z, H* T5 a  T/ j, D
; K* l0 A& @) m' C3 r  x
# E8 N( @% W: O
我又用了别的F407开发板(没有SPI器件引脚复用)作为对照,是可以点亮的,后面我就干脆不折腾了,直接用三根GPIO(PF9 PF11 PF13)模拟SPI时序来点亮液晶彩屏:
( c! S7 t* T" g$ |5 \2 \ 11.jpg
( W8 U" @& ^+ s5 c& R7 b+ [. R成功点亮了:
+ f2 X9 k' X+ U# v9 G% D$ N2 {- L IMG_20190104_094027.jpg ' q5 ~5 H* ^" L8 L6 V5 c6 T' R0 O
附上驱动代码:- d- ~! {; k% u) U+ ]# p3 `
unsigned char SPI1_ReadWriteByte(unsigned char txdata)( N2 [0 s8 \$ C% b3 P) X( _1 Z
{
1 q3 ~# S$ d0 K        int  i;
. F, \7 ?0 L& `; W+ U3 C  p/ L& ?8 M6 j        for(i=0;i<8;i++)
5 y& f) b; L% c- x9 s        {
" G0 u$ n$ p: o' R3 w                SPILCD_CLK_CLR;
# _# ]- [0 M% i8 o% c* j  g# h/ g                if(txdata&0x80)
4 i3 b+ s6 r8 z. U! Z2 H& m3 q                        SPILCD_DI_SET;8 ~6 X! c, h0 I  }* d
                else SPILCD_DI_CLR;
1 n: q8 Z- f, W+ l. B  C5 b                SPILCD_CLK_SET;6 w4 O) s7 F- b
                txdata<<=1;
, f' l6 k1 R4 ]' A2 G' K        }
( h9 l/ Z  D$ g+ J  }" |}       
% ?; q/ {* d& i3 t
5 ]6 f, a- T. ]3 n

+ {) @8 Y3 u+ r3 E) Z# evoid SPILCD_Send_Command(unsigned char out_cmd)              ! ]. S. C* j8 n! v: K
{! G5 m% t8 n3 h8 R9 S. M% O$ f
        SPILCD_CS_CLR;
+ N: z. d- ~' G2 L* r3 s/ _        SPI1_ReadWriteByte(out_cmd);, A) Q$ x7 j3 j. _6 x) s
        SPILCD_CS_SET;& T& X9 v9 x& m6 t- @8 z
}, V0 U) z$ Z, U: N0 A. j

1 m" T5 j% ^! \- f) t1 L
+ L( k% \  y4 o- v& @* Y
void SPILCD_Send_Data(unsigned int out_data)           , A+ h0 a- B3 W+ t* k
{  Q5 x. ?2 M, I
        SPILCD_CS_CLR;
8 w+ F' h# S5 ^+ e& ~        SPI1_ReadWriteByte(out_data>>8);
7 y! b9 B0 D/ P6 M% ]7 f        SPI1_ReadWriteByte(out_data);
: r; }, [$ o  P0 I  `7 l! V3 [        SPILCD_CS_SET;# L1 l3 Q2 f7 F9 d
}: S: t4 N" X! J0 w0 f

1 |" o  z5 \5 }; ?! i

; J5 z$ P5 i, i/ I+ B
" A, i& e7 Q9 B, h9 z

! K3 G0 K; [5 f: l; S; P: E" ?% u- @然后是SYSTICK延时,非常简单,参考原子的代码即可:
2 \, g& w$ ]! s7 {- Q$ z% K( H' [' o+ w' H9 t$ w3 ?: {( |
7 J$ w% \( o5 k" E7 g  k! S9 |
void Delay_us(int nus)5 c" K$ e) a) m7 {+ Y% i4 H
{                ; W, r$ E8 U  S/ J! c
        int temp;                     
/ H7 W0 U) _: H4 y        SysTick->LOAD=nus*fac_us;
2 Z" \8 O. f. R6 T: w6 ~9 n$ l        //时间加载                           ; l) I1 X. H- R& l4 U
        SysTick->VAL=0x00;
9 l5 P/ c$ w" l! [        //清空计数器# T# K* X! a5 _" b" j4 `8 z
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
5 q! c, ^5 ]- \1 D' O1 ]        //开始倒数          
  u- X! k$ _$ l        do
% G; m5 Y9 m3 g+ Y6 T# C+ N, [        {3 k& l' z) R0 [7 y3 i1 t
                temp=SysTick->CTRL;
/ n1 |4 n' e7 @! k  u4 {  M3 R        }while((temp&0x01)&&!(temp&(1<<16)));
# M8 h7 G$ a: q4 P2 [5 g( M        //等待时间到达   5 ~! N8 H3 }: O
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;$ |5 }/ Y! {9 h1 i$ |  C
        //关闭计数器, I% I$ S4 ?- V8 }; T8 [1 n% c1 ?
        SysTick->VAL =0X00;9 L3 M3 z6 I/ ^6 ]: B; R. G+ y' S
        //清空计数器
4 L7 G# H5 V1 M# n( C" O) v}" _  {% X# w# }: Q" l

7 D% v  {# t5 x0 u1 U
8 I. ~/ j/ F2 @+ c
void Delay_ms(short nms)
! w5 T& R0 @* a{                  
0 r7 e5 E+ o4 y! s; `" R) x' s% i        unsigned char repeat=nms/540;+ Z/ f# m# I0 l
        int temp;                * `6 d; O9 Z( f
        //这里用540,是考虑到某些客户可能超频使用,4 h# ~8 h! a9 a$ Z7 g9 y
        //比如超频到248M的时候,delay_xms最大只能延时541ms左右了9 V5 t4 [' e& Y8 |+ b
        short remain=nms%540;# t" p+ [. h* b$ T( B* u
        while(repeat)8 T/ `/ L! }$ }
        {
* k( d  M5 t& w; D5 e                        SysTick->LOAD=(int)540*fac_ms;
. H0 O$ F0 v0 W; i        //时间加载(SysTick->LOAD为24bit)
$ Z) A9 J6 o1 B! E! u# j( X( Y        SysTick->VAL =0x00;
( N0 J3 t% \/ M; m$ p3 Z        //清空计数器
5 p/ z7 m5 {. Z/ h+ k4 C9 j        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;2 |( U; }( p  P9 K9 e9 N- r# ~
        //开始倒数
! K& I6 {9 {  j: N- S* g: k% Z8 }        do
7 |. u: H0 n# T# [        {
4 S5 r9 A' L7 S8 d& H  P                temp=SysTick->CTRL;
9 U0 [' ]" {0 @* M& A        }while((temp&0x01)&&!(temp&(1<<16)));  G3 d" {% M" j8 D$ @
        //等待时间到达   
$ z9 m( {1 L1 J  d/ m7 }: S        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;. V9 a" k# X0 U9 p( {" m
        //关闭计数器& M) E. u1 I! Q4 {
        SysTick->VAL =0X00;5 D$ z, o8 L5 _! i- V
        //清空计数器       
# U4 s# V8 T$ s                repeat--;  y( z' \6 H: o
        }8 B/ E# V3 C" c9 |" \6 V2 l, v
        if(remain)
" |0 i5 U$ q9 Q  U        {9 p% D0 f; p& E) M0 o
                SysTick->LOAD=(int)remain*fac_ms;3 _  [/ R% Q8 W, ^
                //时间加载(SysTick->LOAD为24bit)3 t; |. Y6 T# F9 g8 Y" b
                SysTick->VAL =0x00; $ K$ O/ s( y! ?& P, W
                //清空计数器" T( e. P% V# T# S. Q  K( D
                SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;. \( u* }3 N: ?; w+ h' o' J
                //开始倒数 ( x" A7 Q% p) H$ C) x( ^: u  k
                do
1 M9 B. D$ q! ~% P) ?                {& c% d+ d' D( G. E# r( S  q
                        temp=SysTick->CTRL;
; e* b. a# Y- p$ T5 H                }while((temp&0x01)&&!(temp&(1<<16)));# q- k5 r& e1 V; c" H# Q
                //等待时间到达   # R( e. B' m0 E) D1 `- ]
                SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
. I# j; y" Y* Y, J. Q1 x- \, K5 q! G                //关闭计数器( [% D  b, h+ E$ q
                SysTick->VAL =0X00;! ~. z% w: d! o+ j3 {% c9 s" U# F
                //清空计数器        3 F0 h' z/ E8 {- a% h. B+ }+ v
        }
0 R' Z5 O! {: a0 W0 r- i}
& i$ O2 T3 I& w1 k1 ?* t
3 v7 i; L' `" J
2 c6 q7 F8 [9 u0 f( k
上传工程文件:
% X0 H+ }! o' A4 h1 W 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:153 N3 t  W+ y1 N0 m$ I
这里想给屋脊雀工作室的设计者提个醒,最好能预留一组空的SPI引脚给用户用,尽量不要与已有的SPI器件复用。 ...

! K$ F; [/ j6 Y只要把两片FLASH的CS拉高,应该就可以用了。
wujique 回答时间:2019-1-4 21:39:54
zhdzhd-174422 发表于 2019-1-4 10:441 X) O- o  P4 K4 O
可能空间有限或节约成本吧
) O9 y5 m5 g1 D  S8 d" n
不是节约成本,节约成本的话,就不会有两片FLASH了。
: k% Z) g" \  Q6 P# d- U1 首先是IO口没有那么多。$ u: ]$ ?) P! `4 j! r8 s
2 多个设备共用SPI控制器本来就是我要模拟的情景。# D) M* j8 F5 T

. W4 O2 ?2 E' T* P根本上就是,这套板子,是为了我做软件开发教程而做的。
donatello1996 回答时间:2019-1-5 11:10:08
huangxuejia-292 发表于 2019-1-4 21:37% B" v2 x$ n$ R( X& _, G1 l
只要把两片FLASH的CS拉高,应该就可以用了。

+ u+ G; N) p* |5 i. Q这点我也想到了,也拉高了,就是不行,我还用一个别的407板子来做空白对照,接在相同的PB2~PB4引脚上,是可以驱动的。
mmuuss586 回答时间:2019-1-5 13:08:00

. {. |2 ?1 c" q+ Y2 C不错,感谢分享
berber 回答时间:2021-5-31 19:28:31
说了半天我是来找驱动的你打包的驱动呢
4 [3 ~( y& k% P9 D! e* s/ |2 P. h; y9 ?% X9 Q1 r7 d  ^
龙泉火箭客 回答时间:2022-9-4 20:55:30
谢楼主分享资料谢楼主分享资料

所属标签

相似分享

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