[其他ST产品] 手把手教你STM32入门教程(标准库)

[复制链接]
2442|50
 楼主| xiyaoko2365 发表于 2023-9-17 23:16 | 显示全部楼层
7459965071855995d9.png
注意:  图下在给“Startup”添加文件中选择了“startup_stm32f10x_hd”启动文件,芯片容量不同,“STM32F103VET6”容量512KB,属于高容量

假如你使用 “STM32F103C8T6”芯片,容量为64KB,属于中容量,应选择“startup_stm32f10x_md”
 楼主| xiyaoko2365 发表于 2023-9-17 23:17 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2023-9-17 23:17 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2023-9-17 23:17 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2023-9-17 23:18 | 显示全部楼层
双击工程中“main.c”,然后对该文件右击选择“lnsert '#include file”-“stm32f10x.h”,快速添加头文件。然后在8296行代码复制USE_STDPERIPH_DRIVER 97017650718a7116d1.png
 楼主| xiyaoko2365 发表于 2023-9-17 23:18 | 显示全部楼层
复制后打开小魔术棒-点击“C/C++”在“Define”框粘贴,然后在"Include Pahs"添加头文件路径,然后新建-选择文件路径添加进去:“Test”文件夹中的“Core”、“Fwilb/inc”、“Startup”、“User”,这几个文件夹。
38146650718bcdb6d6.png
 楼主| xiyaoko2365 发表于 2023-9-17 23:18 | 显示全部楼层
把以下代码复制到main.c中,再点Bulid编译,以下是编译成功图片
  1. #include "stm32f10x.h"                  // Device header

  2. int main(void)
  3. {

  4. }
 楼主| xiyaoko2365 发表于 2023-9-17 23:19 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2023-9-17 23:19 | 显示全部楼层
步骤六:编写代码
通过编译后,继续入门第一课   点个灯

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

4329265071902d71f9.png
 楼主| xiyaoko2365 发表于 2023-9-17 23:19 | 显示全部楼层
这个原理图中LED一头接1K上拉电阻通往PB5引脚,另一头接去GND。得知该LED高电平点亮,低电平熄灭。

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

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

5500865071911311ca.png
 楼主| 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);
 楼主| xiyaoko2365 发表于 2023-9-17 23:20 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2023-9-17 23:20 | 显示全部楼层
 楼主| 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
 楼主| xiyaoko2365 发表于 2023-9-17 23:20 | 显示全部楼层
 楼主| 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;
 楼主| xiyaoko2365 发表于 2023-9-17 23:20 | 显示全部楼层
 楼主| 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
 楼主| xiyaoko2365 发表于 2023-9-17 23:21 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2023-9-17 23:21 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部