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

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

转载于:https://my.oschina.net/u/3768017/blog/1815330

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值