STM32基础(1)
[1-1] 课程简介

面包板
没有示波器对最终的现象影响不大
系统结构




安装Keil5 MDK

面包板+跳线+飞线+杜邦线+0.96OLED显示屏(4引脚版本)+电位器(作为AD转换试验)+stlink:用来下载程序和供电
STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等
STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器

STM32F1


系列:主流系列STM32F1
内核:ARM Cortex-M3
主频:72MHz
RAM:20K(SRAM)
ROM:64K(Flash)
供电:2.0~3.6V(标准3.3V)
封装:LQFP48


函数库

第二个 Libraries 里面就是库函数的文件了,我们之后建工程时会用到
第三个 Project 是官方提供的工程示例和模板,以后使用库函数的时候参考
第四个 Utilities 是 STM32 官方评估板的相关例程
这个评估板就是官方用 STM32 做的一个小电路板,用来测评 STM32
这个文件夹里面存的就是这个小电路板的测评程序
新建一个基于标准库的工程
工程文件名字 Project
(文件夹的名称是很方便改的,这个名称以后不太方便改)
选择器件型号->选择 STM32F103C8T6
这个页面跳出的是 Keil 软件的一个新建工程小助手


此时项目为空,添加一些必要的工程文件
打开固件库的文件夹
Libraries-CMSIS-CM3-DeviceSupport-ST-STM32F10x-Startup-arm复制到项目文件夹,新建Start文件夹
可以看到 stm32f10x.h 和两个 system 开头的文件 这个 stm32f10x.h,就是 STM32 的外设寄存器描述文件 它的作用就跟 51 单片机的头文件 REGX52.H 一样 那我们把这三个文件复制下来,也粘贴到 Start 文件夹
因为这个 STM32 是内核和内核外围的设备组成的 而且这个内核的寄存器描述和外围设备的描述文件不是在一起的 所以我们还需要添加一个内核寄存器的描述文件 打开 CM3,CoreSupport,这两个 cm3 (Cortex-M3) 文件就是内核的寄存器描述,复制粘贴到start。
工程文件复制完毕!
回到keil,把我们刚才复制的那些文件添加到工程里来,把
改名为Start




这里的文件都是STM32里最基本的文件,是不需要我们修改的。
最后我们还需要在工程选项里添加上这个文件头路径,要不然软件是找不到.h 文件的。
我们点击这个魔术棒按钮,打开工程选项,在 C/C++ 里 找到这个 Include Paths 栏,然后点击右边三个按钮
点击新建路径


然后再点三个点的按钮,把Start的路径添加上来
接下来我们再新建一个main函数,看看这个工程是否可行

新建User文件夹,我们的 main 函数就放在这个文件夹里
然后Keil里,在Target这里右键,点击添加组,改名为User



这个工程目前还没有添加 STM32 的库函数 所以它还是一个基于寄存器开发的工程


在keil5
编辑寄存器操作了解即可









使能时钟
库函数里面用来开启时钟
RCC_APB2PeriphClockCmd(选择外设,选择新的状态)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

配置端口模式
GPIO_Init(选择哪个 GPIO,参数的结构体)
先定义结构体
GPIO_InitTypeDef GPIO_InitStruct
GPIO_InitStruct 是官方的结构体名称

可以看到这个结构体有三个参数,分别是 GPIO 模式、GPIO 端口、GPIO 速度
GPIO模式配置完成。这个配置的操作方式看上去比较难理解,但是 STM32 的这种方式都是固定的

设置端口的高低电平进行点灯
GPIO_SetBits,这个就可以把指定端口设置为高电平

/*RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00002000;
*/
//使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//GPIO模式配置
//定义结构体
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
//设置端口的高低电平进行点灯
//置为高电平 灯灭
GPIO_SetBits(GPIOC, GPIO_Pin_13);
//置为低电平 灯亮
//GPIO_ResetBits(GPIOC, GPIO_Pin_13);
更多推荐



所有评论(0)