|
因为学长要求不能使用库函数 所以所有的代码都必须用寄存器来写 然而网上写的代码都调用了库函数 没法做参考 于是搞了好久……劳烦大佬们看一眼
我想实现的效果的是 button 按下 小灯 用的是Proteus仿真(方针的配置没问题)
就一个文件
单片机源程序如下:
- #include "stm32f10x.h"
- int main(){
- //配置优先级分组
- SCB->AIRCR |= 0x05FA0000 | 0x400;
- //使能GPIOB GPIOA AFIO
- RCC->APB2ENR |= 0x01 << 0 | 0x01 << 3 | 0x01 << 2;
- //设置GPIOB pin2位 led 通用推挽输出
- GPIOB->CRL &= 0xffffff0f;
- GPIOB->CRL |= 0x03 << 4;
- //设置GPIOA pin2为 button 上拉输入
- GPIOA->CRL &= 0xffffff0f;
- GPIOA->CRL |= (0x01 << 3) << 4;
- //设置GPIOA pin1 为中断线
- AFIO->EXTICR[0] |= 0x00 << 4;
- //使能中断线1
- EXTI->IMR |= 0x01 << 1;
- //设置中断线为下降沿触发
- EXTI->FTSR |= 0x01 << 1;
- //设置IP寄存器
- NVIC->IP[EXTI1_IRQn] |= (0x01 << 2 | 0x01) << 4;
- //使能中断
- NVIC->ISER[0] |= 0x01 << 1;
- while(1){
-
- }
- }
- //重定义中断函数1
- void EXTI1_IRQHandler(){
- if((GPIOA->IDR & 0x02) == 0){
- GPIOB->BSRR |= 0x01 << 1;
- }
- while((GPIOA->IDR & 0x02) == 0);
- GPIOB->BRR |= 0x01 << 1;
复制代码 失败在附件
|
|