丽水建设局网站文件,电销客户数据怎么买,网站服务器维护方案,广西柳州网站建设小程序公司目录一、实验文件main.cstm32f10x.h二、实验思路#xff08;一#xff09;打开两个LED小灯1.在玄武F103开发板上找到LED0、LED1对应的GPIO控制寄存器2.找到GPIOB、GPIOE的地址3.打开APB2外设时钟的使能寄存器4.对GPIO寄存器进行设置对端口输出寄存器进行设置#xff08;二main.cstm32f10x.h二、实验思路一打开两个LED小灯1.在玄武F103开发板上找到LED0、LED1对应的GPIO控制寄存器2.找到GPIOB、GPIOE的地址3.打开APB2外设时钟的使能寄存器4.对GPIO寄存器进行设置对端口输出寄存器进行设置二使两个LED小灯闪烁一、实验文件
main.c #include stm32f10x.h typedef unsigned int u32;void delay(u32 i)
{while(i--);
}int main(void)
{ RCC_APB2ENR | (13);GPIOB_CRL ~( 0x0F (4*5)); GPIOB_CRL | (14*5);RCC_APB2ENR | (16);GPIOE_CRL ~( 0x0F (4*5)); GPIOE_CRL | (14*5);while(1){GPIOB_ODR^(15);GPIOE_ODR^(15);delay(600000);}while(1);
}void SystemInit(void)
{
}
/*********************************************END OF FILE**********************/stm32f10x.h
/*±¾ÎļþÓÃÓÚÌí¼Ó¼Ä´æÆ÷µØÖ·¼°½á¹¹Ì嶨Òå*//*片上外设基地址*/
#define PERIPH_BASE ((unsigned int)0x40000000)/*APB2总线基地址*/
#define APB2PERIPH_BASE (PERIPH_BASE 0x00010000)
/*AHB总线基地址这个不完全准确与真实值有不同*/
#define AHBPERIPH_BASE (PERIPH_BASE 0x20000)/*GPIOB外设基地址*/
#define GPIOB_BASE (APB2PERIPH_BASE 0x0C00)/* GPIOB寄存器*/
#define GPIOB_CRL *(unsigned int*)(GPIOB_BASE0x00)
#define GPIOB_CRH *(unsigned int*)(GPIOB_BASE0x04)
#define GPIOB_IDR *(unsigned int*)(GPIOB_BASE0x08)
#define GPIOB_ODR *(unsigned int*)(GPIOB_BASE0x0C)
#define GPIOB_BSRR *(unsigned int*)(GPIOB_BASE0x10)
#define GPIOB_BRR *(unsigned int*)(GPIOB_BASE0x14)
#define GPIOB_LCKR *(unsigned int*)(GPIOB_BASE0x18)/*GPIOE外设基地址*/
#define GPIOE_BASE (APB2PERIPH_BASE 0x1800)/* GPIOE寄存器*/
#define GPIOE_CRL *(unsigned int*)(GPIOE_BASE0x00)
#define GPIOE_CRH *(unsigned int*)(GPIOE_BASE0x04)
#define GPIOE_IDR *(unsigned int*)(GPIOE_BASE0x08)
#define GPIOE_ODR *(unsigned int*)(GPIOE_BASE0x0C)
#define GPIOE_BSRR *(unsigned int*)(GPIOE_BASE0x10)
#define GPIOE_BRR *(unsigned int*)(GPIOE_BASE0x14)
#define GPIOE_LCKR *(unsigned int*)(GPIOE_BASE0x18)/*RCC外设地址*/
#define RCC_BASE (AHBPERIPH_BASE 0x1000)
/*RCC的AHB1始终使能寄存器地址强制转换成指针*/
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE0x18)
二、实验思路
一打开两个LED小灯
1.在玄武F103开发板上找到LED0、LED1对应的GPIO控制寄存器
玄武F103开发板原理图.pdf ctrlf查找LED0即可
分别位于GPIOB和GPIOEPB5中的B对应GPIOB、PE5中的E对应GPIOE 2.找到GPIOB、GPIOE的地址
在STM32F1xx中文参考手册中的28页找到 但是在本次实验的文件中采取分别列出各个总线的地址具体寄存器位于基于总线的偏移量的方式记录各寄存器的地址
3.打开APB2外设时钟的使能寄存器 可以在STM32F1xx中文参考手册中的低70页看到RCC上GPIOB、GPIOE对应的始终分别在位3和位6 于是在main.c中打开这两个端口的时钟
4.对GPIO寄存器进行设置
采用通用推挽输出速度为10M 在此之前需要清空控制其的端口位
对端口输出寄存器进行设置 如图所示当LED0所在位置为低电平时LED0点亮相反则熄灭 这里我没搞明白为什么是第五位可能是因为PB5和PE5中的数字5如果是这样的话代码中的15都应该改为16但好像并不是这样
//PB5输出低电平设置
GPIOB_ODR(05);
//PE5输出低电平设置
GPIOE_ODR(05);二使两个LED小灯闪烁
将
//PB5输出低电平设置
GPIOB_ODR(05);
//PE5输出低电平设置
GPIOE_ODR(05);改为 while(1){GPIOB_ODR^(15);GPIOE_ODR^(15);delay(600000);}并添加delay函数的定义
void delay(u32 i)
{while(i--);
}上述代码含义即为每隔一定的CPU执行一定数量的算术运算指令delay函数的内容后就将GPIOB和GPIOE的端口输出寄存器的低五位的值按位取反
如下的代码会导致两个LED等都常亮 while(1){GPIOB_ODR^(16);GPIOE_ODR^(16);delay(600000);}