找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2156|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

純寄存器 stm32單片機(jī)外部中斷程序不好使

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 20 黑幣 回復(fù)本帖可獲得 2 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 50%)
跳轉(zhuǎn)到指定樓層
樓主
因?yàn)閷W(xué)長(zhǎng)要求不能使用庫(kù)函數(shù) 所以所有的代碼都必須用寄存器來(lái)寫(xiě) 然而網(wǎng)上寫(xiě)的代碼都調(diào)用了庫(kù)函數(shù) 沒(méi)法做參考 于是搞了好久……勞煩大佬們看一眼
我想實(shí)現(xiàn)的效果的是 button 按下 小燈 用的是Proteus仿真(方針的配置沒(méi)問(wèn)題)

就一個(gè)文件
單片機(jī)源程序如下:
  1. #include "stm32f10x.h"
  2. int main(){
  3. //配置優(yōu)先級(jí)分組
  4.         SCB->AIRCR |= 0x05FA0000 | 0x400;
  5.         //使能GPIOB GPIOA AFIO
  6.         RCC->APB2ENR |= 0x01 << 0 | 0x01 << 3 | 0x01 << 2;
  7.         //設(shè)置GPIOB pin2位 led 通用推挽輸出
  8.         GPIOB->CRL &= 0xffffff0f;
  9.         GPIOB->CRL |= 0x03 << 4;
  10.         //設(shè)置GPIOA pin2為 button 上拉輸入
  11.         GPIOA->CRL &= 0xffffff0f;
  12.         GPIOA->CRL |= (0x01 << 3) << 4;
  13.         //設(shè)置GPIOA pin1 為中斷線
  14.         AFIO->EXTICR[0] |= 0x00 << 4;
  15.         //使能中斷線1
  16.         EXTI->IMR |= 0x01 << 1;
  17.         //設(shè)置中斷線為下降沿觸發(fā)
  18.         EXTI->FTSR |= 0x01 << 1;
  19.         //設(shè)置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;
復(fù)制代碼
失敗在附件

WeChat_20220502232302_.gif (608.02 KB, 下載次數(shù): 31)

WeChat_20220502232302_.gif

按鍵中斷.7z

70.37 KB, 下載次數(shù): 1

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 2#
ID:1009775 發(fā)表于 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. //啟動(dòng)文件里的這個(gè)函數(shù)學(xué)長(zhǎng)說(shuō)也不能用 騙過(guò)編譯
  9. void SystemInit(void){

  10. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表