赞
踩
目录
STM32的应用领域包括但不限于:
总的来说,STM32在各个领域都有广泛的应用。
我们本次学习所用的开发板型号为STM32F103C8T6,根据上图命名规则可知
目前STM32主要有4个系列,从上到下分别是高性能系列、主流系列、超低功耗系列和无线系列。
CoreMark是内核跑分,跑分越高,性能越好。Cortex-M系列是ARM的内核芯片。(红框就是本次学习选用的STM32F1系列)
本次学习用的是STM32F103C8T6,简介如下:
名称解读:
NVIC | 内核里面用于管理中断的设备 比如配置中断优先级等 |
SysTick | 内核里的一个定时器 主要用来给操作系统提供定时服务 可以用该定时器完成Delay函数的功能 |
RCC | 对系统的时钟进行配置 还有就是使能各模块的时钟 在STM32中 其他的这些外设在上电的情况下默认是没有时钟的 不给时钟的情况下 操作外设是无效的 外设也不会工作 这样的目的是降低功耗 所以在操作外设之前 必须要先使能它的时钟 这就需要我们用RCC来完成时钟的使能 |
GPIO | 可以用GPIO来点等 读取按键等 |
AFIO | 可以完成复用功能端口的重定义 还有中断端口的配置 |
EXTI | 配置好外部中断后 当引脚有电平变化时 就可以触发中断 让CPU来处理任务 |
TIM | 整个STM32最常用、功能最多的外设 TIM分为高级定时器、通用定时器和基本定时器三种类型 其中高级定时器最复杂 常用的是通用定时器 这个定时器不仅可以完成定时中断的任务 还可以完成测频率、生成PWM波形、配置成专用的编码器接口等功能 像PWM波形 就是电机驱动、舵机驱动最基本的要求 |
ADC | 内置了12位的AD转换器 可以直接读取IO口的模拟电压值 无需外部连接AD芯片 使用非常方便 |
DMA | 可以帮助CPU完成搬运大量数据这样的繁忙任务 |
USART | 我们常用的UART是异步串口的意思 实际还是使用异步串口较多 |
I2C/SPI | 非常常用的两种通信协议 STM32内置了他们的控制器 可以用硬件来输出时许波形 使用起来更高效 用通用IO口模拟时序波形也是没有问题的 |
CAN/USB | CAN通信一般用于汽车领域 利用STM32的USB外设 可以做一个模拟鼠标、模拟U盘等设备 |
RTC | 在STM32内部完成年月日、时分秒的计时功能 而且可以接外部备用电池 即使掉电也能正常运行 |
CRC | 是一种数据的校验方式 用于判断数据的正确性 |
PWR | 可以让芯片进入睡眠模式等状态 来达到省电的目的 |
BKP | 是一段存储器 当系统掉电时 仍可由备用电池保持数据 根据需要可以完成一些特殊功能 |
IWDG/WWDG | 当单片机因为电磁干扰死机或者程序设计不合理出现死循环时 看门狗可以及时复位芯片 保证系统的稳定 |
DAC | 可以在IO口直接输出模拟电压 是ADC模数转换的逆过程 |
SDIO | 可以用来读取SD卡 |
FSMC | 可以用于扩展内存 或者配置成其他总线协议 用于某些硬件的操作 |
USB OTG | 用OTG功能 可以让STM32作为USB主机去读取其他USB设备 |
本次学习的是C8T6芯片,其中没有最后后面的4个外设。
部分参数解读:
解析:
启动配置的作用是指定程序开始运行的位置 一般情况下 程序都是在Flash程序存储器开始执行 在某些情况下 也可以让程序在别的地方开始执行
启动模式解读:
电路解读:
【STM32】STM32F103C8T6 创建工程模版详解(固件库)_stm32f103c8t6新建工程-CSDN博客
选择下载器位ST-Link Debugger
勾选上电自动复位
编译下载
RCC寄存器来使能GPIOC的时钟 GPIO都是APB2的外设 所以在APB2外设时钟使能寄存器RCC_APB2ENR里面配置
代码如下:
- #include "stm32f10x.h" // Device header
-
- int main(void)
- {
- RCC->APB2ENR = 0x00000010;//4位为一组 采用16进制方式
- GPIOC->CRH = 0x00300000;//C是第13位 我们这里配置的是第13个IO口
- GPIOC->ODR = 0X00000000;//第五位给0 全为低电平 则灯亮
- // GPIOC->ODR = 0X00000000;//第五位给1 为高电平 则灯灭
- while(1)
- {
-
- }
- }
- #include "stm32f10x.h" // Device header
-
- int main(void)
- {
- /*开启时钟*/
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //开启GPIOC的时钟
- //使用各个外设前必须开启时钟,否则对外设的操作无效
-
- /*GPIO初始化*/
- GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //GPIO引脚,赋值为第13号引脚
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
-
- GPIO_Init(GPIOC, &GPIO_InitStructure); //将赋值后的构体变量传递给 GPIO_Init函数
- //函数内部会自动根据结构体的参数配置相应寄存器
- //实现GPIOC的初始化
-
- /*设置GPIO引脚的高低电平*/
- /*若不设置GPIO引脚的电平,则在GPIO初始化为推挽输出后,指定引脚默认输出低电平*/
- // GPIO_SetBits(GPIOC, GPIO_Pin_13); //将PC13引脚设置为高电平
- GPIO_ResetBits(GPIOC, GPIO_Pin_13); //将PC13引脚设置为低电平
-
- while (1)
- {
-
- }
- }
实现点灯现象如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。