標題: 純寄存器 stm32單片機外部中斷程序不好使 [打印本頁]

作者: YANGTAIHUAN    時間: 2022-5-2 23:28
標題: 純寄存器 stm32單片機外部中斷程序不好使
因為學長要求不能使用庫函數(shù) 所以所有的代碼都必須用寄存器來寫 然而網(wǎng)上寫的代碼都調用了庫函數(shù) 沒法做參考 于是搞了好久……勞煩大佬們看一眼
我想實現(xiàn)的效果的是 button 按下 小燈 用的是Proteus仿真(方針的配置沒問題)

就一個文件
單片機源程序如下:
  1. #include "stm32f10x.h"
  2. int main(){
  3. //配置優(yōu)先級分組
  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.         //設置中斷線為下降沿觸發(fā)
  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. //重定義中斷函數(shù)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, 下載次數(shù): 31)

WeChat_20220502232302_.gif

按鍵中斷.7z

70.37 KB, 下載次數(shù): 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. //啟動文件里的這個函數(shù)學長說也不能用 騙過編譯
  9. void SystemInit(void){

  10. }
復制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1