STM32学习第一课——新建工程与点亮LED灯

第一次接触到32位的MCU与之前所学的51单片机和430单片机都是有所不同的,STM32是用库函数来写程序的这样一来不管是从代码的编写和移植都会方便很多。以下是今天所学的东西:
1.新建工程
个人觉得不用去新建一个工程再一步一步的添加各种文件夹和文件,完全可以去官网、论坛或贴吧等地方下载模板,其中大部分文件都可以直接复制过来只需要把你要编程的文件建好就OK,接着只需要把.c .h文件添加进去就可以使用了。(最好把你要写的各种类型的.c.h文件都放在一个文件夹里g个人习惯放在PROJECT文件夹里)
工程里添加文件
工程里添加文件
点击魔术棒,在C/C++的窗口添加所需要用的文件夹(.c.h文件)
点击魔术棒,在C/C++的窗口添加所需要用的文件夹(.c.h文件)
点击魔术棒旁边的三色堆添加.c文件
d点击魔术棒旁边的三色堆添加.c文件
这样工程就建好了。
2.点亮LED灯
STM32的学习需要有两个宝:《STM32参考手册》和《STM32固件库使用手册》这两个文档对32的学习是很有帮助的,有很多途径可以下载。
想要点亮LED灯(所用芯片为STM32F103RC的小黑板)就要了解GPIO的功能和各种模式关于GPIO的配置有八种:(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出
GPIO_Speed_10MHz 最高输出速率10MHz
GPIO_Speed_2MHz 最高输出速率2MHz
GPIO_Speed_50MHz 最高输出速率50MHz
其中最常用的是推挽输出,推挽输出:可以输出高,低电平,连接数字器件。推挽输出与开漏输出是有区别的。开漏输出:输出端相当于三极管的集电极.
要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma)。这里简单说:开漏是0的时候接GND 1的时候浮空 推挽是0的时候接GND 1的时候接VCC
在配置IO口时必须要使IO口的时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
以下为点亮D0的代码:

//FUNCTION:IO初始化
//DATA:20180913
void GPIo_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);//IO口时钟使能
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_2;//选用管脚
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//设置引脚输出速率为 2M
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//IO推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化外设寄存器
	GPIO_ResetBits(GPIOA, GPIO_Pin_8);//输出0
    //GPIO_Init(GPIOD, &GPIO_InitStructure);
    //GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}

下载进单片机就可以点亮了。
总结:其实32也不是很难学,要掌握方法才能事半功倍。在这里有两个问题要搞懂:
1.开漏输出和推挽输出的理解:
开漏是0的时候接GND 1的时候浮空 推挽是0的时候接GND 1的时候接VCC
2.对于引脚的速率设置问题:
2.1对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小
2.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
2.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,
需要选用50M的GPIO的引脚速度。

3.编译过程中出现的警告
主函数大括号前后要空一行
.h文件定义时#endif也要前后空一行

猜你喜欢

转载自blog.csdn.net/qq_41421591/article/details/82696431