1、主要操控BSRR和BRR寄存器
2、BSRR寄存器是置位即写1对应的ODR位为1,写0对应的ODR位不受影响。
3、BRR寄存器是清除对应的ODR位为0,写0对应的ODR位不受影响。
4、BSRR和BRR寄存器均是写1有效,进行置1和清0操作。
5、省略了“stm32f10x.h”,参照学习笔记2即可。
#ifndef __STM32F10X_GPIO_H__
#define __STM32F10X_GPIO_H__
#include "stm32f10x.h"
/*GPIO 引脚号定义*/
#define GPIO_Pin_0 ((uint16)0x0001) /*!< 选择 Pin0 (1<<0) */
#define GPIO_Pin_1 ((uint16)0x0002) /*!< 选择 Pin1 (1<<1)*/
#define GPIO_Pin_2 ((uint16)0x0004) /*!< 选择 Pin2 (1<<2)*/
#define GPIO_Pin_3 ((uint16)0x0008) /*!< 选择 Pin3 (1<<3)*/
#define GPIO_Pin_4 ((uint16)0x0010) /*!< 选择 Pin4 */
#define GPIO_Pin_5 ((uint16)0x0020) /*!< 选择 Pin5 */
#define GPIO_Pin_6 ((uint16)0x0040) /*!< 选择 Pin6 */
#define GPIO_Pin_7 ((uint16)0x0080) /*!< 选择 Pin7 */
#define GPIO_Pin_8 ((uint16)0x0100) /*!< 选择 Pin8 */
#define GPIO_Pin_9 ((uint16)0x0200) /*!< 选择 Pin9 */
#define GPIO_Pin_10 ((uint16)0x0400) /*!< 选择 Pin10 */
#define GPIO_Pin_11 ((uint16)0x0800) /*!< 选择 Pin11 */
#define GPIO_Pin_12 ((uint16)0x1000) /*!< 选择 Pin12 */
#define GPIO_Pin_13 ((uint16)0x2000) /*!< 选择 Pin13 */
#define GPIO_Pin_14 ((uint16)0x4000) /*!< 选择 Pin14 */
#define GPIO_Pin_15 ((uint16)0x8000) /*!< 选择 Pin15 */
#define GPIO_Pin_ALL ((uint16)0xffff) /*!< 选择 所有 */
void GPIO_x_Set_bits(GPIO_TYPEDEF* GPIO_x, uint16 GPIO_PIN_x);
void GPIO_x_RES_bits(GPIO_TYPEDEF* GPIO_x, uint16 GPIO_PIN_x);
#endif /*__STM32F10X_GPIO_H__*/
#include "stm32f10x_gpio.h"
//GPIO端口置位函数
void GPIO_x_Set_bits(GPIO_TYPEDEF* GPIO_x, uint16 GPIO_Pin_x)
{
GPIO_x->BSRR = GPIO_Pin_x;
}
//GPIO端口清零函数
void GPIO_x_RES_bits(GPIO_TYPEDEF* GPIO_x, uint16 GPIO_Pin_x)
{
GPIO_x->BRR = GPIO_Pin_x;
}
#include "stm32f10x.h"
#include"stm32f10x_gpio.h"
void delay(unsigned int z)
{
unsigned int x;
unsigned int y;
for(x=z;x>0;x--)
for(y=0;y<114;y++);
}
int main(void)
{
RCC->RCC_APB2ENR |=1<<3;
//使用结构体封装配置GPIO
GPIOB->CRL |=1<<(4*0);//配置CRL IO0口为输出
GPIOB->CRL |=1<<(4*1);//配置CRL IO1口为输出
GPIOB->ODR &=~(1<<0);//控制ODR寄存器,灯亮
//使用BSRR函数对GPIO端口置1,使用BRR函数对GPIO置0
while (1)
{
GPIO_x_Set_bits(GPIOB,GPIO_Pin_0);//PIN0置1 灯灭
GPIO_x_RES_bits(GPIOB, GPIO_Pin_0);//pin0置0 灯亮
}
}
void SystemInit(void)//配置系统时钟函数,芯片内部时钟SHI=8M时钟
{
}