打印
[其他ST产品]

手把手教你STM32入门教程(标准库)

[复制链接]
楼主: xiyaoko2365
手机看帖
扫描二维码
随时随地手机跟帖
21
xiyaoko2365|  楼主 | 2023-9-17 23:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

注意:  图下在给“Startup”添加文件中选择了“startup_stm32f10x_hd”启动文件,芯片容量不同,“STM32F103VET6”容量512KB,属于高容量

假如你使用 “STM32F103C8T6”芯片,容量为64KB,属于中容量,应选择“startup_stm32f10x_md”

使用特权

评论回复
22
xiyaoko2365|  楼主 | 2023-9-17 23:17 | 只看该作者

使用特权

评论回复
23
xiyaoko2365|  楼主 | 2023-9-17 23:17 | 只看该作者

使用特权

评论回复
24
xiyaoko2365|  楼主 | 2023-9-17 23:17 | 只看该作者

使用特权

评论回复
25
xiyaoko2365|  楼主 | 2023-9-17 23:18 | 只看该作者
双击工程中“main.c”,然后对该文件右击选择“lnsert '#include file”-“stm32f10x.h”,快速添加头文件。然后在8296行代码复制USE_STDPERIPH_DRIVER

使用特权

评论回复
26
xiyaoko2365|  楼主 | 2023-9-17 23:18 | 只看该作者
复制后打开小魔术棒-点击“C/C++”在“Define”框粘贴,然后在"Include Pahs"添加头文件路径,然后新建-选择文件路径添加进去:“Test”文件夹中的“Core”、“Fwilb/inc”、“Startup”、“User”,这几个文件夹。

使用特权

评论回复
27
xiyaoko2365|  楼主 | 2023-9-17 23:18 | 只看该作者
把以下代码复制到main.c中,再点Bulid编译,以下是编译成功图片
#include "stm32f10x.h"                  // Device header

int main(void)
{

}

使用特权

评论回复
28
xiyaoko2365|  楼主 | 2023-9-17 23:19 | 只看该作者

使用特权

评论回复
29
xiyaoko2365|  楼主 | 2023-9-17 23:19 | 只看该作者
步骤六:编写代码
通过编译后,继续入门第一课   点个灯

首先看看自己的开发板原理图有没有LED灯,如图

使用特权

评论回复
30
xiyaoko2365|  楼主 | 2023-9-17 23:19 | 只看该作者
这个原理图中LED一头接1K上拉电阻通往PB5引脚,另一头接去GND。得知该LED高电平点亮,低电平熄灭。

如果你的开发板的LED是其他引脚,例 PA5,也是一样原理能点灯。

开始配置,在main.c中添加代码 :


使用特权

评论回复
31
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者
打开“stm32f10x_rcc.h”,把这个函数:

“void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);”

Q:复制到主函数函数里,为什么要用这个函数呢?

A:这个RCC是内部时钟,必须开时钟才能运行,GPIOB在APB2总线上,所以选这个函数。

函数里面的第一个形参是选择GPIO位置,我的开发板PB5口,所以选择RCC_APB2Periph_GPIOB。

然后,函数里面的第二个形参是使能端,ENABLE就是打开,DISABLE就是关闭。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

使用特权

评论回复
32
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者

使用特权

评论回复
33
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者

使用特权

评论回复
34
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者
然后就是GPIO配置

打开“stm32f10x_gpio.h”,把这个函数:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

这个函数需要引出结构体进行配置,再赋给这个函数.

第一个形参是GPIO位,如果你是PA5即GPIOA,本文章是PB5即GPIOB

第二个形参是结构体变量名,这个结构体跟枚举差不多,直接&上结构体变量地址就行了

GPIO_Init(GPIOB, &GPIO_InitStructure); //PB5

例 :GPIO_Init(GPIOA, &GPIO_InitStructure); //PA5

使用特权

评论回复
35
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者

使用特权

评论回复
36
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者
GPIO_InitTypeDef中要引出3个结构体进行配置

第一个是GPIO工作模式,LED一般都是推挽输出 ,具体内容参考STM32入门-GPIO端口的八种工作模式

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽输出

第二个是GPIO引脚,因为原理图是PB5,所以直接改后面的数字就可以了   

GPIO_InitStructure.GPIO_Pin      = GPIO_Pin_5;

第三个是速度,一般直接50Mhz

  GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

使用特权

评论回复
37
xiyaoko2365|  楼主 | 2023-9-17 23:20 | 只看该作者

使用特权

评论回复
38
xiyaoko2365|  楼主 | 2023-9-17 23:21 | 只看该作者
配置好了,最后就是直接置1点亮(高电平)

直接调函数就可以置高电平了

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//GPIO设置为高电平
第一个参数为 GPIO位置,假如是PA5,那就GPIOA。如果是PB5,那就GPIOB.

第二个参数是引脚位置,GPIO_Pin_x(x:引脚位置,例:PB5 = GPIO_Pin_ 5).

GPIO_SetBits(GPIOB, GPIO_Pin_5);//PB5

使用特权

评论回复
39
xiyaoko2365|  楼主 | 2023-9-17 23:21 | 只看该作者

使用特权

评论回复
40
xiyaoko2365|  楼主 | 2023-9-17 23:21 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则