–Relay.h
#ifndef __Relay_h
#define __Relay_h
#define BITBANDADDR(addr,n) ((addr & 0xF0000000) + 0x2000000 + ((addr & 0xFFFFF) << 5) + (n << 2))
#define MEMACCESS(addr) (*((volatile unsigned long *)addr))
#define BIT_ADDR(addr,n) (MEMACCESS(BITBANDADDR(addr,n)))
#define GPIOA_ODR_ADDR (GPIOA_BASE + 0x0C)
#define GPIOA_IDR_ADDR (GPIOA_BASE + 0x08)
#define PAout(n) BIT_ADDR(GPIOA_ODR_ADDR,n)
#define PAin(n) BIT_ADDR(GPIOA_IDR_ADDR,n)
#define Relay1 PAout(8)
#define Relay2 PAout(9)
void Relay_Init(void);
void Relay_Star(void);
void Relay_delay(int ms);
#endif
–Relay.c
#include <stdio.h>
#include "stm32f10x.h"
#include "Relay.h"
static int i = 0;
static int j = 0;
void Relay_Init(void)
{
RCC->APB2ENR |= 0x0004;
GPIOA->CRH = (GPIOA->CRH&0xFFFFFF00)|0x00000033;
// PA8、PA9端口需要打开
}
void Relay_Star(void)
{
Relay1 = 0;
Relay_delay(500);
Relay1 = 1;
Relay_delay(500);
Relay2 = 0;
Relay_delay(500);
Relay2 = 1;
Relay_delay(500);
}
void Relay_delay(int ms)
{
for( i = 0 ; i < 100 ; i++)
for(j = 0 ; j < ms ; j++);
}