在上一帖中我忘记提及如何使用屋脊雀CMSISDAP下载器进行程序下载和TTL串口调试,本帖补上CMSISDAP串口驱动安装教程。 z+ C# e* b1 Y, n U5 v 首先如果安装了MDK5系列的话,DAP下载器的驱动是肯定会顺便安装上的,在工程的Debug界面下可以看到DAP下载器的配置: 这个非常简单,就不详细讲,先讲串口驱动安装,Windows系统默认是没有CMSISDAP驱动的,需要手动安装,屋脊雀提供的资料中带了CMSISDAP驱动,直接安装即可,首先要将usbser.sys文件放到C:\Windows\INF目录下覆盖: 然后将剩下的mdmcpq.inf和stmcdc.inf放到一个文件夹下,在设备管理器中安装,安装完毕之后即可识别: 为了方便大家,我将这三个文件打包发到论坛上: 1 P- }& G% ~$ g5 k3 d ! \9 c8 X9 k' i' U/ p, ]3 r! u 然后是SPI彩屏驱动,彩屏需要三根引脚,CLK MOSI CS,时钟,数据,片选,我一开始打算使用核心板上引出的SPI FLASH引脚(PB2 PB3 PB4)作为复用来驱动彩屏的,谁知道怎么都点不亮: 3 H& R: a( v' C 我又用了别的F407开发板(没有SPI器件引脚复用)作为对照,是可以点亮的,后面我就干脆不折腾了,直接用三根GPIO(PF9 PF11 PF13)模拟SPI时序来点亮液晶彩屏:. p- {% S" `' X9 t" c6 D2 N 成功点亮了:# x' J, f/ J: u7 i6 p 附上驱动代码: unsigned char SPI1_ReadWriteByte(unsigned char txdata)2 O/ ~9 X5 P2 b/ r- D6 t { 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; else SPILCD_DI_CLR; SPILCD_CLK_SET; txdata<<=1;- b0 j3 I. b# Y- C+ j } 4 h9 y3 i1 }& ^ } 3 t' Z3 ?( y0 j, }1 u void SPILCD_Send_Command(unsigned char out_cmd) {9 c8 [! o) T3 ] SPILCD_CS_CLR; SPI1_ReadWriteByte(out_cmd); SPILCD_CS_SET; } 1 [6 u: n& V& |' ` 2 J0 E4 K$ ? B* {" q void SPILCD_Send_Data(unsigned int out_data) {/ X! [2 B9 a# ^ H6 U% g% I SPILCD_CS_CLR; SPI1_ReadWriteByte(out_data>>8);! L( B& y( D- x% R0 F SPI1_ReadWriteByte(out_data); SPILCD_CS_SET; } " x& u* ?8 S2 z! ]7 _% r# d 然后是SYSTICK延时,非常简单,参考原子的代码即可: ' m3 H2 q% B/ h5 N void Delay_us(int nus) { int temp; 0 u. B$ |" R4 n SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; //清空计数器! ]9 |$ T; E2 _6 Y SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数 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 //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器7 C9 y' v( b- ~1 q' | SysTick->VAL =0X00; //清空计数器 } - B! h6 I. V; n3 J void Delay_ms(short nms) { unsigned char repeat=nms/540; 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; while(repeat)( f# O. }& F0 X6 }" w Z x; v: R { SysTick->LOAD=(int)540*fac_ms; //时间加载(SysTick->LOAD为24bit) SysTick->VAL =0x00; 4 M/ v- _' ^0 b8 b. v //清空计数器6 D9 F# v0 t A3 M SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 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 //关闭计数器 SysTick->VAL =0X00;/ Y3 s0 T# z/ |5 ?" \' w //清空计数器 . L$ p0 f6 v2 Q! ~% Y repeat--; }8 A8 x" s% h4 f* X* S# O& Q+ J3 W5 t if(remain) { SysTick->LOAD=(int)remain*fac_ms; //时间加载(SysTick->LOAD为24bit). O3 |* k9 `8 O" Q( f( A m SysTick->VAL =0x00; ) I% C; P L+ r) Z //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;" u4 i3 g& _3 E3 r //开始倒数 do! D- T& i9 H5 L% r9 Z! g) O9 B! C5 M { temp=SysTick->CTRL; }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; //关闭计数器 SysTick->VAL =0X00;# }( S. W+ m+ ^3 |; u //清空计数器 }* 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 上传工程文件: |
只要把两片FLASH的CS拉高,应该就可以用了。
不是节约成本,节约成本的话,就不会有两片FLASH了。
1 首先是IO口没有那么多。3 U/ V" H# s' [. ?
2 多个设备共用SPI控制器本来就是我要模拟的情景。
) W* u6 Z3 |6 b1 k7 X4 q
根本上就是,这套板子,是为了我做软件开发教程而做的。
这点我也想到了,也拉高了,就是不行,我还用一个别的407板子来做空白对照,接在相同的PB2~PB4引脚上,是可以驱动的。
不错,感谢分享