本帖最后由 黑夜之狼 于 2016-11-21 10:05 编辑 9 D3 W) \8 c9 @$ J% Y" e
. w# |+ i- W5 T( v闲来无事,翻箱看到了这块板子,之前没玩过M0,现在来好好玩下,有板子的朋友可以一起指导交流!: |) k( S& K) q) \; i4 K8 }/ @
1 V: H; ?6 V6 I1 ]
首先打开ST的选型手册,看看板载的主控芯片STM32F030R8到底有多牛叉先
) V! @, m# E Z( a
5 [ {4 O+ z& N' r8 v0 A9 \, r& H0 S* \, @: L
64KFlash,8K的RAM,16*12bit的ADC,SPI、I2C、USART各2路,在JLC上查过,售价5个大洋左右,性价比还算不错,20个引脚的做到两块多....(这会不会和STM8有冲突  )
$ R- e& m' K, [* [- k6 ?* \( p ?1 |) ^& o3 a: U5 n7 f" x% p
板子的照片就不发了,和大多数的Nucleo板一样,那就直奔主题,来点灯吧!, q% g' k5 s5 h
5 v& n7 u2 H( n; t9 I% z
点灯前,养成一个好习惯-使能外设的时钟(在这点上,很多初学者可能多数都是从51过来,都是犯了这个错误)
z0 g, ~- \& h7 p0 c. W; W既然有了时钟这个概念,那么这个时钟怎么来的,到底有快呢?
. H2 B. G& e x8 w% a' p! x我们先看看时钟树(参考手册P90 Figure 10)
- D1 ?( ?7 W) E
( B2 x7 \2 }% K9 B
通过上面的时钟树,我们一共有三种不同的时钟源7 l0 G- ?% P/ z4 t6 B# m+ d6 J$ \
1.内部8MHz RC时钟# q# M% Y7 k) H- R* Z, ^) P
2.外部RC时钟(可接4-32MHz晶振)
: k2 ?. P8 o9 O. C/ X& W) @3.内部锁相环PLL时钟
/ \3 P4 E ~# P由于STM32F030 Nucleo64这块开发板只留了HSE接口,焊接了LSE,我也懒得找晶振焊接上去,往后的实验会用HSI/2经过PLL,12倍频到48MHz给系统时钟(已经是这颗芯片最高时钟频率了!)
8 \% M" m5 R& `3 y% g! r; m! }既然要用PLL,那么我们打开参考手册P94,看看PLL是如何配置的:
; P, a1 n8 H! b! H |7 }1 g: C
' u, \+ }6 O1 B9 K贴上代码:& p. V' Q- Y- g8 n( Z% q( `
- void SystemClock_Config(void)/ @7 X5 U8 u$ N& O& I/ e' v
- {
# J$ E3 l' M8 Q) S* `, ? - RCC_DeInit(); //将外设 RCC寄存器重设为缺省值
' L6 i. F8 S' b- J. x9 }, e -
9 v% `6 q0 d, |2 M/ ` - RCC_HSICmd(ENABLE); //使能HSI $ H2 ?7 J. O/ K3 g* y, L$ e8 |( d
- while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //等待HSI使能成功% X$ d; A; q. Q; C, [2 R7 }! u2 L
- RCC_PLLCmd(DISABLE); //禁止PLL6 t# i* }. W6 g6 E% d
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == SET); //等待PLL禁止成功/ h, [1 w$ f; @) P
- RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB clock = SYSCLK" O9 ^+ R: S* _, Z! |
- RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12); //PLL时钟来源HSI二分频,再12倍频,得出48MHz
& b( R! ]- }& P4 ` - RCC_PLLCmd(ENABLE); //使能PLL
& ~: c3 P9 _- o% s5 C( s - while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL使能成功
* J% x0 A' B+ G3 d( x% W - RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置PLL为系统时钟
$ ]& t; B& I/ I( @* f2 M - while(RCC_GetSYSCLKSource() != 0x08); 8 Y; U. U$ p: Q! q# {
- }
复制代码 那么时钟的配置就完成了,回到之前所讲的使能外设时钟。: D9 ~4 r, ]& o. ~7 r
GPIO是挂在在AHB这个时钟总线上的,对GPIO的时钟使能,我们可以通过RCC_AHBPeriphClockCmd()这个库函数来实现,代码如下:
& O1 X& j; W$ ~/ \+ ~- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //使能PA端口时钟
复制代码 板子上只有LD2才可以控制,是挂在PA5上,而配置GPIO的步骤如下:
/ g" Q2 t% u3 u" z- G2 f1.选择配置的端口
3 p# O% k' m! ]2.选择控制模式
# E& v. M4 s$ T$ q3.GPIO的速率
& h; q7 ^, m; |0 u- [$ Z. h% \3 h9 t
实现代码如下:
6 E/ R9 J! P+ J ]. b6 s- U. K# E- /*
8 @( c0 E% r9 J7 S* r( _ - LED2<----->PA51 _. p: {% L) m
- */
4 t8 a7 _! j; l - //LED IO初始化
& X5 L0 k7 w; [0 _ - void LED_Init(void)
* U" ^! a# I1 b4 K - {- o- M+ n* R1 o$ d% o
- GPIO_InitTypeDef GPIO_InitStructure;4 e1 \9 d# @# }; }4 S) ?% a
-
' z* b. G$ j, }6 a6 y4 U - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //使能PA端口时钟9 y" U' H6 Z4 h- j) Y8 N9 r
-
K B* e% z' W) [ m - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PA.5 端口配置
/ i2 h: H5 t! c3 I; ?3 [ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;$ y! i+ M$ b8 x8 q. N. r
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
' ]/ L; i* D/ p% t - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz8 t: f5 s0 h" u7 m6 t7 q
- GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.5& S2 Q& u; L9 H- A/ K
- GPIO_ResetBits(GPIOA, GPIO_Pin_5); //PA.5 输出低电平 9 c/ B7 X! l; r& K; S$ q
- }
复制代码 到了这里就完成点灯这个步骤,如果让LED闪烁起来,那写一个简单的delay即可,我们这里顺带把Cortex-M0内核的嘀嗒定时器玩起来,让这个定时器完成delay功能,具体代码可参考官方例程,这里就不具体描述了1 |- d/ a1 \; X! \4 c
3 f" K3 Y2 u# g7 |4 e/ b
: {. R) i3 }) E
' L2 v! t' e4 T* Y5 x3 g1 a1 ]- Z* M, `$ ~! A
3 P' o8 N6 A/ k. k- m
' M4 L8 C+ o y2 D0 z
|
额,跟着论坛里某一位大神安装的,设备管理器里读取不了驱动。
然后程序也下载不进去
下载程序我就知道一种,把.bin文件拖进虚拟U盘, x' s- }& L# I" y6 ^0 g
不会其他的方法了
你发的截图是已经读取到驱动的呀,是不是你的代码工程配置有问题?
下载我帖子上的工程,然后连接开发板,直接下载,看看
感谢管理员和各位的支持,本人文笔实在一般,如果有错误的地方,还麻烦各位提出来,多多指导!
把板子连接到电脑上,看能不能读出驱动来
第一次连接板子与电脑 就显示一个 设备 ST-Link Debug
安装完驱动之后什么也读不出来
驱动已经安装好了,不能下载代码吗?