标题: 纯寄存器 stm32单片机外部中断程序不好使 [打印本页]

作者: YANGTAIHUAN    时间: 2022-5-2 23:28
标题: 纯寄存器 stm32单片机外部中断程序不好使
因为学长要求不能使用库函数 所以所有的代码都必须用寄存器来写 然而网上写的代码都调用了库函数 没法做参考 于是搞了好久……劳烦大佬们看一眼
我想实现的效果的是 button 按下 小灯 用的是Proteus仿真(方针的配置没问题)

就一个文件
单片机源程序如下:
  1. #include "stm32f10x.h"
  2. int main(){
  3. //配置优先级分组
  4.         SCB->AIRCR |= 0x05FA0000 | 0x400;
  5.         //使能GPIOB GPIOA AFIO
  6.         RCC->APB2ENR |= 0x01 << 0 | 0x01 << 3 | 0x01 << 2;
  7.         //设置GPIOB pin2位 led 通用推挽输出
  8.         GPIOB->CRL &= 0xffffff0f;
  9.         GPIOB->CRL |= 0x03 << 4;
  10.         //设置GPIOA pin2为 button 上拉输入
  11.         GPIOA->CRL &= 0xffffff0f;
  12.         GPIOA->CRL |= (0x01 << 3) << 4;
  13.         //设置GPIOA pin1 为中断线
  14.         AFIO->EXTICR[0] |= 0x00 << 4;
  15.         //使能中断线1
  16.         EXTI->IMR |= 0x01 << 1;
  17.         //设置中断线为下降沿触发
  18.         EXTI->FTSR |= 0x01 << 1;
  19.         //设置IP寄存器
  20.         NVIC->IP[EXTI1_IRQn] |= (0x01 << 2 | 0x01) << 4;
  21.         //使能中断
  22.         NVIC->ISER[0] |= 0x01 << 1;
  23.         while(1){
  24.                
  25.         }
  26. }
  27. //重定义中断函数1
  28. void EXTI1_IRQHandler(){
  29.         if((GPIOA->IDR & 0x02) == 0){
  30.                 GPIOB->BSRR |= 0x01 << 1;
  31.         }
  32.         while((GPIOA->IDR & 0x02) == 0);
  33.         GPIOB->BRR |= 0x01 << 1;
复制代码
失败在附件

WeChat_20220502232302_.gif (608.02 KB, 下载次数: 31)

WeChat_20220502232302_.gif

按键中断.7z

70.37 KB, 下载次数: 1


作者: YANGTAIHUAN    时间: 2022-5-2 23:38
最后的啊代码一直被吞也不知道为啥
  1. void EXTI1_IRQHandler(){
  2.         if((GPIOA->IDR & 0x02) == 0){
  3.                 GPIOB->BSRR |= 0x01 << 1;
  4.         }
  5.         while((GPIOA->IDR & 0x02) == 0);
  6.         GPIOB->BRR |= 0x01 << 1;
  7. }
  8. //启动文件里的这个函数学长说也不能用 骗过编译
  9. void SystemInit(void){

  10. }
复制代码





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1