初识stm32
St 意法半导体 SOC 产商(使用Arm内核进行外设产品开发)
Arm Arm Ip授权商(开内核标准提供给SOC产商使用)
32 即是32 位 32bit
M 微控制器 (stc ,stm,NXp,Inter87系列,Atmel)
产生背景:传统的8 位和16 (51mcu,AVR)处理器已经无法满足市场和技术变更的需求,从多厂家纷纷研发新一代的微控制器32位控制器,St Nxp等厂商。
STM8和 STM32 分类:
32 位控制器
内核 Cortext -M0 STM32-F0 入门级
STM32-L0 低功耗
内核 Cortext-M3 STM32-F1 基础型 主频72mhz
STM32-F2 高性能
STM32-L1 低功耗
STM32-F3 混合信号
内核 Cortext-M4 STM32-F4 高性能 主频180Mhz
STM32-L4 低功耗
STM32-F7 高性能
8位控制器
超级版6502 内核 STM8S 标准系列
STM8AF 标准汽车应用
STM8AL 低功耗汽车应用
STM8L 低功耗
命名方法:
F表示: 基础类型
引脚数 ; V :100 C :48 R:64 Z :144 B:208 N:216
falsh 大小 E :512kB C:256 I 2048
T:QFP
6:-40~85
原理Io口分配方法:
系统IO
电源: VBAT VSS,VDD,VDDA,VSSA VREF+,VEREF-
晶振io mainT IO ,RTC 外部时晶振 Io
下载Io RX,TX,JTMS,JTCK,JTDI,JTDO,NJTRST
启动IO BOOT0 ,BOOT1
复位IO NRST
专用IO I2C,SPI,SDIO,FSMC,CAN,ADC,DAC,
存储器分类:
CODE 0x0000 0000---0x1fff ffff
SRAM 0x2000 0000---0x3fff ffff
外设 0x4000 0000---0x5fff ffff
FSMC(b1-b2) 0x6000 0000---0x7fff ffff
FSMC(b3-b4) 0x8000 0000---0x9fff ffff
FSMC 寄存器 0xA000 0000---0xafff ffff
未使用 0xD000 0000---0xDfff ffff
Cortext-m3内部外设 0xE000 0000 ---0xffff ffff
存储器映射:给存储器分配地址的过程
寄存器:根据每个单元功能不同,以功能为命名给已分配地址的内存单元所取得别名
寄存器映射:给已经分配好地址且有特定功能的内存单元取别名的过程
本质 :寄存器就是分配好的地址
步骤
1 新建项目
Test 项目添加startup 文件 main.c文件 编译 出错 在main.c 中添加 SystemInit
2 编辑main.c
操作GPIOx 基本步骤
(1)初始化时钟 (时钟是stm32心脏,没有它无法运行)
(2 )配置GPIOB 模式 速度
(3)设置为输出或者输入
使用Stm32f10x 中文参考手册找到 RCC 地址 为: 04002 1000
可知 GPIOB0 在APB2 所以使能时钟APB2 En RCC地址加上 偏移地址
可得:0x40021018
使能时钟 GPIOB
*(unsigned int*) 0x40021018 |=((1)<<3)
在手册中的存储印象找到GPIOB 地址为40010c00 GPIOB0地址 = GPIOB地址+偏移地址
可得 *(unsigned int *) 0x40010c00|=(1<<4*0);
GPOB0地址为 :0x40010c00
配置GPIOB0 为输出 GPIOB0——ODR 地址为:GPIOB0+偏移地址
可得
*(unsigned int *)0x40010c0c&=~((1<<0))
源程序
#include "stm32f10x.h"
void SystemInit(void)
{
}
int main(void)
{
//设置RCC时钟
*(unsigned int *)0x40021018|=((1)<<(3));
// 配置 GPIOB0
*(unsigned int *)0x40010c00|=((1)<<(4*0));
//GPIOB0_ODR Set out;
*(unsigned int *)0x40010c0c&= ~((1<<0));
}