stm32入门学习(1)初识stm32单片机

学习参考:

6-什么是寄存器(第1节)—概念讲解_哔哩哔哩_bilibili

学习材料:野火指南者开发板---stm32f103vet6

  • 内核

 基础概念:

1.程序是写在flash中的。内核通过icode读取代码(icode的i表示instruction,即‘指令’)。

2.数据有常量和变量两种,常量由const修饰,储存在flash中,变量存储在sram中。

3.内核可以通过DMA和dcode读取数据,所以为了避免读取数据时侯冲突,一般由总线矩阵解决这个问题。 

4.DMA作用-----搬数据。比如,要将一个SRAM中的数据存储到串口的数据寄存器(DR)中,不使用DMA的做法是,先将数据从SRAM中读取到CPU中的寄存器中,再将数据从cpu中的寄存器转到串口的数据寄存器(DR)中;如果使用DMA,则cpu给DMA发送一个搬数据的指令,DMA就会将数据搬运到串口的数据寄存器(DR)中,避免了对cpu的占用,提高cpu的利用率。

5.cpu内部还有一个内存区域,实现分成八个部分,分别存放flash,sram,外设,fsmc等数据。

6.芯片内部由三条总线---APB1/APB2/AHB,APB1是低速的,剩下的是高速的。

7.

(1)保护二极管:当引脚电压高于VDD 时,上方的二极管导通,当引脚电压低于VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

(2)mos管:控制推挽输出/开漏输出。

8.用控制寄存器的方式在f103vet6板子上实现点灯。

#include "stm32f10x.h"

void SystemInit(void);
int main(void)
{
	*(unsigned int *) 0X40021018 |=(1<<3);
	//使能gpiob端口的时钟
	*(unsigned int *) 0X40010C00 |=((1)<<(4*0));
	//控制io口为输出
	*(unsigned int *) 0X40010C0C &=~(1<<0);
	//控制odr寄存器
	//置位 |=      清0 &=~
}
void SystemInit(void)
{
	
}

9.利用寄存器映射点亮f103vet6中的led

stm32f103x.h代码

//存放内存其映射的代码

//外设 perirhral,地址不要多此一举把七个0用空格隔开
#define PERIR_BASE     			((nsigned int)0X40000000)
//外设基地址
#define APB1_PERIR_BASE     (PERIR_BASE)
//APB1的外设基地址
#define APB2_PERIR_BASE     (PERIR_BASE+0X10000)
//APB2的外设基地址
#define AHB_PERIR_BASE     	(PERIR_BASE+0X20000)
//AHB的外设基地址



#define RCC_BASE            (AHB_PERIR_BASE+0X1000)
//定义rcc的基地址,由于rcc是挂载在AHB上的,因此给AHB及地址加一个偏移量就可以得到rcc的基地址。
#define GPIOB_BASE          (APB2_PERIR_BASE+0X0C00)
//定义GPIOB的基地址,由于GPIOB是挂载在APB2上的,因此给APB2及地址加一个偏移量就可以得到GPIOB的基地址。



#define RCC_APB2ENR         *(unsigned int*)(RCC_BASE+0X18)
//定义控制APB2时钟的寄存器的基地址,这里强制类型转换成32位的(int 是32位),使用的时候可以直接访问到32位的,即四个字节的大小。
#define GPIOB_CRL         *(unsigned int*)(GPIOB_BASE+0X00)
//定义GPIOB的CRL寄存器基地址
#define GPIOB_CRH         *(unsigned int*)(GPIOB_BASE+0X04)
//定义GPIOB的CRH寄存器基地址
#define GPIOB_ODR         *(unsigned int*)(GPIOB_BASE+0X0C)
//定义GPIOB的ODR寄存器基地址

main.c代码

#include "stm32f10x.h"

void SystemInit(void);
int main(void)
{
	RCC_APB2ENR |=(1<<3);
	//使能gpiob端口的时钟
	GPIOB_CRL	|=((1)<<(4*0));
	//控制io口为输出
	GPIOB_ODR &=~(1<<0);
	//控制odr寄存器
	//置位 |=      清0 &=~
}
void SystemInit(void)
{
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值