day05:闪烁灯实验
#include "stm32f10x.h"
// 宏定义:指针
#define GPIO_RCC *(unsigned int *)0X40021018
#define GPIO_CRL *(unsigned int *)0X40011000
#define GPIO_ODR *(unsigned int *)0X4001100C
// 延迟函数
void delay(unsigned int i)
{
for(; i!=0; i--);
}
int main(void)
{
/* 配置RCC寄存器,使能GPIO口的时钟 */
GPIO_RCC |= ( 1<<4 );
/* 配置CRL寄存器,配置为推挽输出 */
GPIO_CRL |= ( 1<<(4*2) );
// 闪烁灯
while(1)
{
/* 配置ODR寄存器 */
GPIO_ODR &= ~( 1<<2 ); // 位2置0,LED亮
delay(0XFFFFF);
GPIO_ODR |= ( 1<<2 ); // 位2置1,LED不亮
delay(0XFFFFF);
}
}
void SystemInit(void)
{
/* 函数体为空,目的是为了骗过编译器不报错 */
}
实验现象:D4的LED灯大概隔1秒闪烁一次。
========================================
D5的LED灯闪烁:
#include "stm32f10x.h"
// 宏定义:指针
#define GPIO_RCC *(unsigned int *)0X40021018
#define GPIO_CRL *(unsigned int *)0X40011000
#define GPIO_ODR *(unsigned int *)0X4001100C
// 延迟函数
void delay(unsigned int i)
{
for(; i!=0; i--);
}
int main(void)
{
/* 配置RCC寄存器,使能GPIO口的时钟 */
GPIO_RCC |= ( 1<<4 );
/* 配置CRL寄存器,配置为推挽输出 */
GPIO_CRL |= ( 1<<(4*3) );
// 闪烁灯
while(1)
{
/* 配置ODR寄存器 */
GPIO_ODR &= ~( 1<<3 ); // 位3置0,LED亮
delay(0XFFFFF);
GPIO_ODR |= ( 1<<3 ); // 位3置1,LED不亮
delay(0XFFFFF);
}
}
void SystemInit(void)
{
/* 函数体为空,目的是为了骗过编译器不报错 */
}
===========================================
D4和D5之间切换闪烁
#include "stm32f10x.h"
// 宏定义:指针
#define GPIO_RCC *(unsigned int *)0X40021018
#define GPIO_CRL *(unsigned int *)0X40011000
#define GPIO_ODR *(unsigned int *)0X4001100C
// 延迟函数
void delay(unsigned int i)
{
for(; i!=0; i--);
}
int main(void)
{
/* 配置RCC寄存器,使能GPIO口的时钟,D4和D5共用使能端,即开关是共用 */
GPIO_RCC |= ( 1<<4 );
// 闪烁灯:D4和D5两个LED灯之间不断闪烁
while(1)
{
/* 配置CRL寄存器,配置为推挽输出 */
GPIO_CRL |= ( 1<<(4*2) );
/* 配置ODR寄存器 */
GPIO_ODR &= ~( 1<<2 ); // 位2置0,LED亮:D4
delay(0X99999);
GPIO_ODR |= ( 1<<2 ); // 位2置1,LED不亮:D4
/* 配置CRL寄存器,配置为推挽输出 */
GPIO_CRL |= ( 1<<(4*3) );
/* 配置ODR寄存器 */
GPIO_ODR &= ~( 1<<3 ); // 位3置0,LED亮:D5
delay(0X99999);
GPIO_ODR |= ( 1<<3 ); // 位3置1,LED不亮:D5
}
}
void SystemInit(void)
{
/* 函数体为空,目的是为了骗过编译器不报错 */
}

浙公网安备 33010602011771号