注:
虽然说标题写的是开始,但我个人是学了一点点才想起将这个过程记录下来。全文仅用于未来的自己复习和回忆专用。
以下正文:
一开始想学习stm32买了正点原子的v2精英开发板,奈何废话真的太多,看了20多节课还没开始跑代码,于是短暂将其封印,重新pdd买了套江科大的配件开始了学习,自己接线的感觉让我更有实感与动静,直到GPIO输入,开始自己写驱动与函数并调用,让我产生了底层知识并没有学牢的感觉,于是继续弃掉2倍速看起了野火的标准库教学。
记录下自己写的野火哥课上留的作业
实现RCC外设寄存器结构体声明,把时钟相关代码改成寄存器结构体操作方式
.h文件
#define PERIPH_BASE ((unsigned int)0x40000000)
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef struct
{
uint32_t CR;
uint32_t CFGR;
uint32_t CIR;
uint32_t APB2RSTR;
uint32_t APB1RSTR;
uint32_t AHBENR;
uint32_t APB2ENR;
uint32_t APB1ENR;
uint32_t BDCR;
uint32_t CSR;
}RCC_TypeDef;
#define RCC ((RCC_TypeDef*)RCC_BASE)
typedef struct
{
uint32_t CRL;
uint32_t CRH;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t BRR;
uint32_t LCKR;
}GPIO_TypeDef;
#define GPIOB ((GPIO_TypeDef*)GPIOB_BASE)
//关键语句,它将GPIOB_BASE强制转换为GPIO_TypeDef类型的指针。
.c文件
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR |= ( (1) << 3);
GPIOB->CRL |= ( (1) << (4*0));
GPIOB->ODR &=~(1<<0);
}
void SystemInit(void)
{
}
最终实现给PB0低电平