stm32接上电源
野火_STM32F103C8T6核心板_V1.0_原理图.pdf
给GPIO输出低电压
PA 起始地址:0x4001 0800
ODR:偏移地址:0C
得到PA 绝对地址:0x4001 080C
(unsigned int *)0X4001080C 地址
*(unsigned int *)0X4001080C 操作地址
置零: &= ~();
PA1 PA2 PA3
点亮PA2 根据电路图低电压即可点亮 即ODR2值为 0 其他不变
1 0000000000000001
2 1<<2 1左移两位为 0000000000000100
3 ~(1<<2) 取反 111111111111111011
4 &=~(1<<2) 与原数相与 XXXXXXXXXXX0XX
*(unsigned int *)0X4001080C &= ~(1<<2);//将PA2 点亮 点亮PA1 PA2 &= ~(3<<1);??
STM32 输入输出是由 配置寄存器来控制
端口配置是4位一组
1 MODE2--- 00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz
设置为输出模式 01
2 CNF2------ 设置为: 00 推挽输出 (01开漏是用在I2C)
3 PA2 配置:0001 -----对应完整为 0000 0001 0000 0000
4 1<<4*2 4位代表一个GPIO配置组 左移2组即可
PA 起始地址:0x4001 0800 配置的偏移地址为 00
配置的绝对地址为: *(unsigned int *)0X40010800
5 |= 写1 原值与 0000 0001 0000 0000 相或即可 XXXX XXX1 XXXX XXXX
*(unsigned int *)0X40010800 |= (1<<(4*2)); //如果PA1 PA2 都点亮 0000 0001 0001 0000 17<<4
开启时钟 为了节省功耗,外设的时钟都是关闭的
打开时钟RCC 这个外设控制
RCC偏移地址是 0x18
RCC 起始地址是:0x4002 1000
RCC绝对地址:*(unsigned int *)0X40021018
IOPA 置为1 |= (1<<2)
#include "stm32f10x.h" int main(void) { //配置RCC寄存器使能GPIO时钟 *(unsigned int *)0X40021018 |= (1<<2); // 配置CRL 推挽输出 *(unsigned int *)0X40010800 |= (1<<(4*2)); //配置ODR PA1 ODR PA2 (1<<2) *(unsigned int *)0X4001080C &= ~(1<<2); while(1); } void SystemInit(void) { }