|
因?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)題)
1.png (32.69 KB, 下載次數(shù): 20)
下載附件
2022-5-3 02:35 上傳
就一個(gè)文件
單片機(jī)源程序如下:
- #include "stm32f10x.h"
- int main(){
- //配置優(yōu)先級(jí)分組
- SCB->AIRCR |= 0x05FA0000 | 0x400;
- //使能GPIOB GPIOA AFIO
- RCC->APB2ENR |= 0x01 << 0 | 0x01 << 3 | 0x01 << 2;
- //設(shè)置GPIOB pin2位 led 通用推挽輸出
- GPIOB->CRL &= 0xffffff0f;
- GPIOB->CRL |= 0x03 << 4;
- //設(shè)置GPIOA pin2為 button 上拉輸入
- GPIOA->CRL &= 0xffffff0f;
- GPIOA->CRL |= (0x01 << 3) << 4;
- //設(shè)置GPIOA pin1 為中斷線
- AFIO->EXTICR[0] |= 0x00 << 4;
- //使能中斷線1
- EXTI->IMR |= 0x01 << 1;
- //設(shè)置中斷線為下降沿觸發(fā)
- EXTI->FTSR |= 0x01 << 1;
- //設(shè)置IP寄存器
- NVIC->IP[EXTI1_IRQn] |= (0x01 << 2 | 0x01) << 4;
- //使能中斷
- NVIC->ISER[0] |= 0x01 << 1;
- while(1){
-
- }
- }
- //重定義中斷函數(shù)1
- void EXTI1_IRQHandler(){
- if((GPIOA->IDR & 0x02) == 0){
- GPIOB->BSRR |= 0x01 << 1;
- }
- while((GPIOA->IDR & 0x02) == 0);
- GPIOB->BRR |= 0x01 << 1;
復(fù)制代碼 失敗在附件
|
|