51格式
#include "reg52.h"
void main(void)
{
P0=0XFE; //总线操作
}
类比51写32 (先使能时钟,再配置输入输出模式【CRL寄存器】,最后配置IO口 )
1)寄存器编写 GPBB0为灯泡接口
配置时钟 选择APB2,APB2挂载在RCC上,且要打开GPIOB的时钟,所以位3置1
因为地址偏移位0X18, RCC起始地址位0x4002 1000
所以PB0置0为 * (unsigned int *) 0X4002 1018 |=(1<<3); //RCC起始地址位0x4002 1000
//因为地址偏移位0X18 所以选择地址为0X4002 1018
* (unsigned int *) 将 0X4002 1018转化为地址
RCC起始地址
GPIO基地址
CRL寄存器 (四位为一组,配置GPIOB0则要配置mode0 和 CNF0,选择推挽输出模式,MODE0配置为01,CNF0为00)
所以配置低四位为 0001
使用GPIOB端口,起始地址为0X4001
因为地址偏移位0X00
所以GPIOB0置0为 * (unsigned int *) 0X4001 0C00 |=((1)<<(4*0)); //GPIOB基地址为0x4001 0c00
//因为CRL寄存器偏移0X00 所以选择地址为0X4001 0C00
* (unsigned int *) 将 0X4001 0C00转化为地址
CRL寄存器四位为一组,配置位0001,且配置PB0,所以1左移4*0位
(若配置PB1为推挽输出,则 * (unsigned int *) 0X4001 0C00 |=^((1)<<(4*1)); )
ODR寄存器 高八位无效 低八位有效
使用GPIOB端口,起始地址为0X4001
因为地址偏移位0Ch==0xC0
所以PB0置0为 * (unsigned int *) 0X4001 0C0C &=^(1<<0); //GPIOB基地址为0x4001 0c00
//因为ODR寄存器偏移0XC0 所以选择地址为0X4001 0C0C
* (unsigned int *) 将 0X4001 0C0C转化为地址
#include "stm32f10x.h"
int main(void)
{
//使能时钟
* (unsigned int *) 0X4002 1018 |=(1<<3);
//配置CRL寄存器 配置IO口输出模式
* (unsigned int *) 0X4001 0C00 |=((1)<<(4*0));
//配置ODR寄存器
* (unsigned int *) 0X4001 0C0C &=^(1<<0);
}