添加味道,上午对STM32F042做了比较简单的介绍,现在我们来让nucleo32跑起来!
" c; y* R; y \1 o T 为了省时,我使用了CubeMx作为架构生成平台:! o- ^) S4 m! Q3 {# Y4 ?
STEP 1:# m" s9 z L5 x
打开CubeMx软件,并且选择Board Selector,Verdor选择默认,Type of board 选择Nucleo32,Mcu Series选择STM32F0,然后确定完成
/ R& _; V" ]2 E芯片,板型号选择步骤。5 Q& `7 L; h7 S
1 s3 Q: D% l) _! G) l; \
. ?% G7 H" r& y: M: NSTEP 2:7 {; H4 O- r. g% F2 R
进行引脚,外设配置,在这里,芯片默认会使用内部RC8M作为系统时钟,哥不喜欢,哥喜欢快,所以点击Clock Configuration:显示时钟配置界面,
3 L9 |8 y4 ]* [* ~ Y, }6 h/ R) }: k然后选用HSI RC 48Mhz作为系统时钟,详细配置如图所示:* t$ b" B' k. L# e5 e: M3 i
, o; F( l0 a: G5 i
然后,我们继续进行芯片外设引脚配置,第一,使用uart2(nuceleo32 F042使用usart2连接stlink 的vcp)所以我们不需要另外的转串口工具。
" G) ?6 l. K% j% S1 S配置如图所示:
* n& t" b3 [0 b& F7 o) {- j
2 z* b+ P7 H/ r5 } r [# q X: ^我们采用异步串口,所以选用Asynchronous,这里我们还没有完毕,我们还需要配置uart的参数,我们采用115200,8-n-1配置
e$ `2 a" P1 ~, J6 a1、点击configuration:
) n/ k7 y6 \) z* S2、双击connectivity中的USART2" U% G6 R6 S i' M
3、Baud Rate选项输入115200
4 ~# q8 X1 ?2 O' I4 Q w/ j4、Word Length 选择8bit,其他保持默认
3 q: z. P ^ V/ ?1 m5、点击Apply,OK8 h3 O2 V# T8 P$ D8 u( Z6 ?
6、此时我们已经完成了串口的发送,接收功能配置
* |' b! h) `1 }$ d' q2 D; ?2 _& e5 T. I1 P. z
% |* N( f5 f7 g( _3 @3 c2 c8 T接下来,我们配置LED,板载LED连接PB3
1 s3 P3 x( _" D/ C6 o所以我直接配置PB3为output,其实我们可以看出,芯片默认已经有串口的引脚配置了,我们只需要使能Usart2即可,如果没有9 S4 v/ ?# L: @, y4 y( n2 H9 v
我们也可以设置PA2为USART2_TX,PA15为USART2_RX {8 \: F- [' |6 {( l# Q
配置好后,如下图所示
) j% O7 t7 A. o l2 q1 K
8 C1 ~, |, @( x$ Q
SETP 3:# Z) q$ p/ D) |! n$ V
这样,板子硬件我们已经配置好了,接下来就是生成工程,点击toolbar上的齿轮符号(Generate source code based on user settings),8 d7 G- ~# C) [6 v
会弹出Project settings窗口,分别输入project name(项目名) project location(项目路径) IDE(项目工作平台),. L& B1 C+ T& J* P5 Q
然后切换到Code Generator界面并且按照如下如所示设置即可:
! ^2 C$ p7 |9 @
" v: I: U0 s C" i- A7 E6 O- R, l
最后我们按确定,open project,项目环境就建立好了$ e8 L! w- s: B7 F2 B; V
3 d4 @ `5 V7 l' X) ISTEP 4:
7 O0 ]" F# }) m0 U编辑User Code:
) h: m* U1 i3 L% D; ^6 q. [编辑LED的翻转函数: r+ K9 y3 u& A$ j' k _( @: u8 C
- #define LED_PORT GPIOB
- ~; \7 }: g6 j7 T - #define LED_PIN GPIO_PIN_3
1 v. O4 Q8 `/ T3 }2 G! P% Z - #define LED_GREEN_TOGGLE HAL_GPIO_TogglePin(LED_PORT,LED_PIN)
复制代码 编辑main函数:
4 s3 i& K4 k" N* p$ f6 j& V. Q- /* USER CODE BEGIN WHILE */
|, B j3 a0 e: A% G6 \* W" V3 \ - while (1)
3 E4 Q$ A4 [( {1 Z1 v8 S - {1 A/ x4 w N4 n+ Q- |4 y
- uint32_t wSysClock;! I F( e2 b7 Z' t2 e! g
- /* USER CODE END WHILE */
) ?/ V' ^2 a; L" c/ _5 G
2 v) f: z! M: [% P- /* USER CODE BEGIN 3 */
- l0 c0 C* r3 E! j* _" ` - wSysClock = HAL_RCC_GetSysClockFreq(); j$ w4 ~: g- K
- printf("System Clock is :%ld\r\n",wSysClock);% K+ }/ {% a. Z& y |9 [0 j
- HAL_UART_Transmit(&huart2,"my name is inc\r\n",sizeof("my name is inc\r\n"),1000);
3 ? i- l9 Y9 h" G( P; z* T2 K) T - LED_GREEN_TOGGLE;
7 m; d" g8 Q: ? - HAL_Delay(1000);
5 S# z( d) k5 b8 X" v/ R8 \ - }1 t& z" N8 O i3 j' P" j# z
- /* USER CODE END 3 */
复制代码
% p. \3 k0 y ]1 z- f5 j
+ ]9 x. d0 u& e因为我们在main中使用了printf,所以我们需要重定向printf函数:
& r0 H2 u" a( `# Q我们打开usart.c
$ ?" Z& p' ~" o6 b2 F; \9 R在user code区域中添加一下代码:- [6 e* w, @) p/ `
- #pragma import(__use_no_semihosting) 5 e2 M6 Z4 H8 u) s8 c/ t' N
-
S" _# f F8 k) B - struct __FILE ) N! c( _( ~3 ~% }
- { ) H' C+ Y$ r; X
- int handle; V5 ?& G& E- \* F. u) F
- /* Whatever you require here. If the only file you are using is */
5 i8 a/ j6 {* ? - /* standard output using printf() for debugging, no file handling */
( O, m! s* b5 q9 D$ m) r0 n - /* is required. */
* d2 X+ V5 j. _" [3 E# _ - };
% Q" n. w: J3 s. ^+ `: U7 A1 F - /* FILE is typedef’ d in stdio.h. */ 9 v, J8 N9 M4 R
- FILE __stdout;
h1 X( Z7 H* U. ?# N( X6 q" K - ( `5 D3 h9 a3 C- F+ E1 n0 B! n- N
- void _sys_exit(int x)
: x6 R+ s9 g4 P$ Y - {
/ [) }8 A4 z4 m% r# o; h2 k/ L - x = x;
# A* Y( i$ l0 t - }
4 d3 Q- g) k( ]% e$ T3 U
0 n# Y( D' ? K" P2 Y5 B9 c' y- int fputc(int ch, FILE *f)
# L# P" \* f: ^! ^& k& S* Z - {
2 K* R% w" y9 ^0 I" v& X( u } - while((USART2->ISR&0X40)==0); ; s; ?4 t$ c8 T: D# V( C5 ~
- USART2->TDR = (uint8_t) ch;
" i* z% z: F, y# a8 [4 u - return ch;
0 C0 S% [: t5 v( u$ B- J; `/ Z - }
复制代码 最后我们编译工程,并且下载,对于软件生成的工程,默认是没有设置stlink下载后的工作的,所以我们可以点击option,debug,stlink,setting,flash download,然后勾选reset and run,最后确定返回。" K( t# I0 J! j q5 |
最后一步,下载工程。
, s6 W% c7 N9 y) e& B3 C一下是运行现象:$ A! \, _7 w: X5 W# q, E
2 z( {. T& o& V; \" M5 H* U! u/ e; f
5 N5 Y8 H. X; h
& |7 l/ e7 T; [: u: t) S* |8 m相关推荐
0 D- E0 b$ p& q1 k6 X, o! k5 LSTM32单片机官方开发工具一览( p4 b. k$ R# |0 P! d& _
STM32评估开发板列表+ w! B7 V7 T" a# y9 `
ARM Cortex-M内核STM32 单片机产品全览! f) f" y4 Z+ r5 Y
STM32微控制器参考设计
% V3 l) n9 l! C5 |% D, o. f |
有空我再写个帖子吧,SPI通了,其他其实没有任何难度的,你可以看我下一个帖子,就关于SPI设置的
[cod,]void RCC_Configuration(void)
{
/* Enable SYSCFG clock */8 m* z# `; b I5 f% E9 Q8 c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //EXTI 等时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA |RCC_AHBPeriph_GPIOB |RCC_AHBPeriph_GPIOF, ENABLE);
//允许串口1/2的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}[/code]! O9 \5 A9 _7 c& v9 U
代码如上,很怀疑串口二有什么特殊,关于042的资料和很少!!* O6 s. S% v5 {" [; ^
望回复!!多谢
我也遇到了同样的问题,你找到原因了吗?
这个我试了一下,用不了