前言
这篇博客是基于我老师布置的项目”stm32f030水温控制”所写的,我会把每个模块的基本配置为大家进行讲解.好啦闲话不多说,进入我们的正题.
LED和蜂鸣器的配置
LED或者是蜂鸣器(BEEP)基本上是我们学习32的基础,配置这方面十分简单,所以我会简单的略过一些配置.
我的板上LED和蜂鸣器与单片机相连的IO口有三个,分别是LED1-PA11 LED2-PA12 BEEP-PA0,接下来我们就说一下如何配置.
首先,我们需要定义GPIO结构体与PA口的时钟,这里有别与F1系列的配置,F0PA口上的时钟是在AHB总线上,而F1PA口上的时钟是APB2,所以这里我们要区分一下,否则会报错.
配置完时钟,我们就可以对IO口进行配置了,这里我设置了IO口为推挽输出,速度为50MHz,
这里要强调的是,F0区别与F1的是,IO口配置这边,不能直接像F1一样推挽和输出是同时配置的,F0是分别配置的,还有就是右击IO口速度那里,我们可以看到:
可以看出,如果我们使用GPIO_Speed_Level_3也可以代替GPIO_Speed_50MHz,可以更直观的看出IO口速度,具体怎样选择,还是得看个人选择.
最后,在配置一下GPIO_Init函数就基本配置完成.
那么,我们如何使得LED翻转呢,这里就可以用到GPIO_SetBits和GPIO_ResetBits两个函数,不过我还是喜欢用F1的位带操作.所以等一下,我们讲一下如何配置F0来实现位带操作.
位带操作的配置
位带操作,可以使我们输出高低电平时给1 or 0来实现,这样可以方便我们操控IO口,而且方便快捷,如果用操作函数的方式,翻转IO口就有点麻烦,所以这里我们设置下位带操作.
我们可以在所在的工程中添加stm32f0xx_sys.h的头文件来存放,当我们需要使用位带操作时,直接调用就可以了.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#define __STM32F0xx_SYS_H
typedef struct{ unsigned short int b0 : 1; unsigned short int b1 : 1; unsigned short int b2 : 1; unsigned short int b3 : 1; unsigned short int b4 : 1; unsigned short int b5 : 1; unsigned short int b6 : 1; unsigned short int b7 : 1; unsigned short int b8 : 1; unsigned short 大专栏 基于stm32f030水温控制1yword">int b9 : 1; unsigned short int b10 : 1; unsigned short int b11 : 1; unsigned short int b12 : 1; unsigned short int b13 : 1; unsigned short int b14 : 1; unsigned short int b15 : 1; }REG16_TypeDef;
#define GPIOA_ODR_Addr (GPIOA_BASE+0x14)
#define GPIOB_ODR_Addr (GPIOB_BASE+0x14)
#define GPIOC_ODR_Addr (GPIOC_BASE+0x14)
#define GPIOD_ODR_Addr (GPIOD_BASE+0x14)
#define GPIOE_ODR_Addr (GPIOE_BASE+0x14)
#define GPIOF_ODR_Addr (GPIOF_BASE+0x14)
#define GPIOA_IDR_Addr (GPIOA_BASE+0x10)
#define GPIOB_IDR_Addr (GPIOB_BASE+0x10)
#define GPIOC_IDR_Addr (GPIOC_BASE+0x10)
#define GPIOD_IDR_Addr (GPIOD_BASE+0x10)
#define GPIOE_IDR_Addr (GPIOE_BASE+0x10)
#define GPIOF_IDR_Addr (GPIOF_BASE+0x10)
#define PAout ((volatile REG16_TypeDef *)GPIOA_ODR_Addr)
#define PAin ((volatile REG16_TypeDef *)GPIOA_IDR_Addr)
#define PBout ((volatile REG16_TypeDef *)GPIOB_ODR_Addr)
#define PBin ((volatile REG16_TypeDef *)GPIOB_IDR_Addr)
#define PCout ((volatile REG16_TypeDef *)GPIOC_ODR_Addr)
#define PCin ((volatile REG16_TypeDef *)GPIOC_IDR_Addr)
#define PDout ((volatile REG16_TypeDef *)GPIOD_ODR_Addr)
#define PDin ((volatile REG16_TypeDef *)GPIOD_IDR_Addr)
#define PEout ((volatile REG16_TypeDef *)GPIOE_ODR_Addr)
#define PEin ((volatile REG16_TypeDef *)GPIOE_IDR_Addr)
#define PFout ((volatile REG16_TypeDef *)GPIOF_ODR_Addr)
#define PFin ((volatile REG16_TypeDef *)GPIOF_IDR_Addr)
typedef unsigned char u8; typedef unsigned short int u16; typedef unsigned int u32; #endif
|
这样位带操作就已经配置好了.
结语
因为时间的问题,我没有办法把整个工程一次性讲完,所以我会分篇讲解,今天就先说的这里,我只是个学生,如果在文章中有什么错误的地方,请不吝指教,谢谢!