本帖最后由 黑夜之狼 于 2016-11-21 10:05 编辑 * I3 A' U* q: ?7 L
9 r: b, n/ t+ ~- B2 Y9 w5 f9 l0 k" z
闲来无事,翻箱看到了这块板子,之前没玩过M0,现在来好好玩下,有板子的朋友可以一起指导交流!- Q2 B# r# N5 R5 \ C4 j0 g) _. m a( _
4 q4 O; j1 S; I" \首先打开ST的选型手册,看看板载的主控芯片STM32F030R8到底有多牛叉先
# B* u! Q: F7 g' ?7 Z4 U' \7 L
+ c: q! d# N; c) ]. Y5 x4 P* V
3 @- H) t O! _64KFlash,8K的RAM,16*12bit的ADC,SPI、I2C、USART各2路,在JLC上查过,售价5个大洋左右,性价比还算不错,20个引脚的做到两块多....(这会不会和STM8有冲突  )
6 v+ e. g/ r) X) V& }- w* j4 ^. Z1 q& s1 ~! f1 ^
板子的照片就不发了,和大多数的Nucleo板一样,那就直奔主题,来点灯吧!
7 u3 u& I3 S. P! u. _8 z' R9 m
2 _" G( ^$ K! z6 h$ y点灯前,养成一个好习惯-使能外设的时钟(在这点上,很多初学者可能多数都是从51过来,都是犯了这个错误)
0 I9 g! H a6 o, N' D u/ e/ V+ T既然有了时钟这个概念,那么这个时钟怎么来的,到底有快呢?* A' l2 q2 B/ I2 i) c* N
我们先看看时钟树(参考手册P90 Figure 10)
. A9 M1 B2 ~1 w2 L" C5 c/ l
+ b* o7 ]; p$ K) n6 z
通过上面的时钟树,我们一共有三种不同的时钟源- \0 u7 F) Y8 {" A* E m
1.内部8MHz RC时钟7 P/ J6 F: T) P4 C) ?
2.外部RC时钟(可接4-32MHz晶振)
0 K+ v9 h3 k6 B3.内部锁相环PLL时钟
$ w, ]0 n' g+ i h5 r由于STM32F030 Nucleo64这块开发板只留了HSE接口,焊接了LSE,我也懒得找晶振焊接上去,往后的实验会用HSI/2经过PLL,12倍频到48MHz给系统时钟(已经是这颗芯片最高时钟频率了!)4 u! N; X1 r' T. G5 z3 }
既然要用PLL,那么我们打开参考手册P94,看看PLL是如何配置的:; Y# O7 H5 T; K- i
8 h, H, U( L* I0 ?, Y贴上代码:
) t6 A- v% h8 \- void SystemClock_Config(void)
8 s+ P9 X. q- O - { 0 X2 _; l4 t* u$ ]: I5 B( g* V* w
- RCC_DeInit(); //将外设 RCC寄存器重设为缺省值 7 d4 `# k* \9 q2 D" n) T
-
0 q7 ~% G+ [5 a8 T- R. w; P - RCC_HSICmd(ENABLE); //使能HSI
% v* Z$ _8 O# j+ V J - while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //等待HSI使能成功% j& P V' z7 ^! b9 [- T' K5 I( C
- RCC_PLLCmd(DISABLE); //禁止PLL8 Q0 m! a' [2 e- M4 c9 j9 y
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == SET); //等待PLL禁止成功7 f6 W+ y; W3 I! v
- RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB clock = SYSCLK
% {' x. K# w- P+ y$ @2 R( o - RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12); //PLL时钟来源HSI二分频,再12倍频,得出48MHz
9 V q5 |( G+ V$ y. H9 h; i - RCC_PLLCmd(ENABLE); //使能PLL
" E1 _8 Z- t" a. o8 E4 |& A - while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL使能成功
5 |9 i( p& d9 |1 @' q - RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置PLL为系统时钟0 `/ x1 R/ d! k% e- b
- while(RCC_GetSYSCLKSource() != 0x08);
6 c( V, j, t0 H$ e - }
复制代码 那么时钟的配置就完成了,回到之前所讲的使能外设时钟。
8 F* S# n- u' B7 [5 z) e. }5 U+ d; XGPIO是挂在在AHB这个时钟总线上的,对GPIO的时钟使能,我们可以通过RCC_AHBPeriphClockCmd()这个库函数来实现,代码如下:
# r1 B3 }! C; F1 T5 {" D- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //使能PA端口时钟
复制代码 板子上只有LD2才可以控制,是挂在PA5上,而配置GPIO的步骤如下:
2 v5 H6 w% Z' | Q4 p G1.选择配置的端口. {2 ?) @( D; Q+ k
2.选择控制模式
" J/ X5 G6 g" f) r: r5 q7 b3.GPIO的速率! m5 b0 X& l# d2 O8 D9 c
5 X. }5 K( f P4 S" v实现代码如下:
/ B! Y2 z s' r6 _$ K0 U- /*
! _6 {; ? c$ f; M - LED2<----->PA5
0 v% M; _' p( q! J( o* P# o - */ ! F; z K# O/ f7 B, Z7 ^
- //LED IO初始化
`7 Z6 o4 O- n - void LED_Init(void). u/ `* w h1 z: T$ i
- {
- P; N, B/ d+ W( f8 w - GPIO_InitTypeDef GPIO_InitStructure;" G* H$ M+ g$ H6 f' [
- 5 j: Z6 M2 p t' I
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //使能PA端口时钟- L' J. |# A( I3 V7 c9 O: s2 c- e
- 0 d8 I" W$ R+ X9 h) |: O
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PA.5 端口配置# p. S ]1 f! l. u n& H
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
8 _6 q6 o8 ^& R1 E6 r - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出, @; t) r j! ~3 ^
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
0 j: ?6 L' Q: W, S- U( S5 B2 g3 a - GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.5
; h7 Y! f# j+ x. H! _& [ - GPIO_ResetBits(GPIOA, GPIO_Pin_5); //PA.5 输出低电平 % r/ o3 m/ K+ `. N* c) k
- }
复制代码 到了这里就完成点灯这个步骤,如果让LED闪烁起来,那写一个简单的delay即可,我们这里顺带把Cortex-M0内核的嘀嗒定时器玩起来,让这个定时器完成delay功能,具体代码可参考官方例程,这里就不具体描述了
" ^: K# i6 _, G$ v& [4 j$ M! S; e9 k. j2 R" A( z/ D+ T: N
1 ]7 X( y3 e7 t f) N6 I- K9 E8 E& u$ H3 K6 e6 m3 l
6 ?: Y* V+ P# E1 B
( S# i S$ m& W M0 @) z9 M! ]; F2 C
6 H, Y) B# C c( Z4 R: X; S |
额,跟着论坛里某一位大神安装的,设备管理器里读取不了驱动。
然后程序也下载不进去
下载程序我就知道一种,把.bin文件拖进虚拟U盘) i3 f9 o! {3 d0 U
不会其他的方法了
你发的截图是已经读取到驱动的呀,是不是你的代码工程配置有问题?
下载我帖子上的工程,然后连接开发板,直接下载,看看
感谢管理员和各位的支持,本人文笔实在一般,如果有错误的地方,还麻烦各位提出来,多多指导!
把板子连接到电脑上,看能不能读出驱动来
第一次连接板子与电脑 就显示一个 设备 ST-Link Debug + ~4 z, g% F7 ^" f1 p* ~1 X
安装完驱动之后什么也读不出来
驱动已经安装好了,不能下载代码吗?