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

相關文章
相關標籤/搜索