STM32 使用操做内存地址点灯

  初识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 位控制器it

内核 Cortext -M0   STM32-F0   入门级
                   STM32-L0   低功耗
   
内核 Cortext-M3    STM32-F1   基础型 主频72mhz
                   STM32-F2   高性能
                   STM32-L1   低功耗
                   STM32-F3   混合信号io

内核  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)); }  

相关文章
相关标签/搜索