寄存器和库函数.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操纵寄存器&调用库函数
编程步骤:
1、原理图一一硬件的连接方式
2、芯片手册一一怎样使用芯片
3、编写程序
d 外设功能初始化配置
e 外设使能
f 外设中断使能和中断优先级配置
g 其他功能函数 LED 初始化
一、寄存器 总时钟初始化 端口时钟初始化 //b 为10端口 (PB/PA/PE 等)在APB2的位置 j 青除端 口 默认值 GPI0A->CRL &二 OxFOOFFFFF; 〃由GPIOA->CRL/H 给PAx 配置位x 清零 设置端 口 工作模式 GPIOA->CRL | = 0x03300000;
〃根据表17、18配置
LED 设置为 OFF GPIOA->ODR I = 1«5 I 1«6; 〃由数据输出寄存器控制,0—ONJ —OFF
a 总时钟初始化
b 外设时钟初始化
c 外设10配置 Stm32_ClockJnit(9); RCC->APB2ENR |= l«b;
二、库函数
GPIO」nitTypeDef GPIO」nitLed; 〃定义结构体变量端口时钟初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOB,
ENABLE);
设置端口工作模式(推挽输出)
GPIO InitLed.GPIO Mode = GPIO Mode Out PP;
GPIO InitLed.GPIO Pin = GPIO Pin 5;
GPIO」nitLed・GPIO_Speed = GPIO_Speed_50MHz;
〃由GPIOJnitStruct^指定的参数初始化外设GPIOx寄存器GPIO _lnit(GPIOB,&GPIO JnitLed);
GPIO Jn it(GPIOA,&GPIO JnitLed);
LED设置为OFF
GPIO_SetBits(GPIOA,GPIO_Pi n_5);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
//GPIO_SetBits 设置,GPIO_ResetBits 清除〃或EEP初始化(和LED类似)
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
KEY初始化
一、寄存器
端口时钟初始化RCC->APB2ENR |= 1«2|1«6;
j青除端口默认值GPIOA->CRL &二 OxFFFFFFFO; 设置端口工作模式GPIOA->CRL | = 0x00000008;
端口输岀位设置GPIOA->ODR | = 1«0;
〃上拉为高电平置1 按键检测
if(!(GPIOA->IDR & (1«0)))//按下为低电平
delay_ms(50);//隔50ms 看是否满足
if(!(GPIOA->IDR & (1«0)))
return UP;
}
〃由输入寄存器GPIOA4DR来检测是否按下二、库函数
GPIO」nitTypeDef GPIO」nitKey;
端口时钟初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOE,
ENABLE);
设置端口工作模式(浮空输入)
GPIO」n itKey.GPIO_Mode = GPIO_ModeJN_FLOATING; GPIO」n itKey.GPIO_Pin = GPIO_Pin_0;
GPIO Jn it(GPIOA,&GPIO JnitKey);
按籲检测
#define KEY1
GPIO_ReadlnputDataBit(GPIOA,GPIO_Pin_0)
〃检测函数GPIO_ReadlnputDataBit 读GPIOA->IDR 的数据if(KEYl==O)
{
Delay(5000);
if(KEYl==O)
return UP;
长按短按(见工程STM32_1)
2、按下灯亮,再按下灯灵
2、长按灯亮,长按灯灭
2.1、长按为多次处理(按着一直亮)
2.2、长按仅为一次处理(按着只亮一次)