朱老师单片机课程学习记录
#ifndef __GPIO_H__
#define __GPIO_H__
#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOB_CRH (GPIOB_BASE + 0x04)
#define GPIOB_ODR (GPIOB_BASE + 0x0C)
#define GPIOB_BSRR (GPIOB_BASE + 0x10)
#define GPIOB_BRR (GPIOB_BASE + 0x14)
#define GPIOC_CRL (GPIOC_BASE + 0x00)
#define GPIOC_ODR (GPIOC_BASE + 0x0C)
#define GPIOC_BSRR (GPIOC_BASE + 0x10)
#define GPIOC_BRR (GPIOC_BASE + 0x14)
#define RCC_APB2ENR 0x40021018
#define rGPIOB_CRH (*((unsigned int *)GPIOB_CRH))
#define rGPIOB_ODR (*((unsigned int *)GPIOB_ODR))
#define rGPIOB_BSRR (*((unsigned int *)GPIOB_BSRR))
#define rGPIOB_BRR (*((unsigned int *)GPIOB_BRR))
#define rGPIOC_CRL (*((unsigned int *)GPIOC_CRL))
#define rGPIOC_ODR (*((unsigned int *)GPIOC_ODR))
#define rGPIOC_BSRR (*((unsigned int *)GPIOC_BSRR))
#define rGPIOC_BRR (*((unsigned int *)GPIOC_BRR))
#define rRCC_APB2ENR (*((unsigned int *)RCC_APB2ENR))
typedef struct
{
volatile unsigned int CRL;
volatile unsigned int CRH;
volatile unsigned int IDR;
volatile unsigned int padding;
volatile unsigned int BSRR;
volatile unsigned int BRR;
volatile unsigned int LCKR;
}GPIO_Typedef;
GPIO_Typedef *pGPIOB = (GPIO_Typedef *)GPIOB_BASE;
void delay(void);
void led_init(void);
void led_flash(void);
#endif
#include "gpio.h"
void main(void)
{
led_init();
led_flash();
while (1);
}
void led_init(void)
{
rRCC_APB2ENR = 0x00000008;
pGPIOB->CRH = 0x33333333;
pGPIOB->ODR = 0x0000AA00;
}
void led_flash(void)
{
unsigned int i = 0;
for (i=0; i<3; i++)
{
pGPIOB->ODR = 0x0000ff00;
delay();
pGPIOB->ODR = 0x00000000;
delay();
}
}
void delay(void)
{
unsigned int i, j;
for (i=0; i<1000; i++)
for (j=0; j<2000; j++);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)