OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3198|回复: 0

[精英F103] 软件中断事件如何配置,希望给个程序(最好寄存器版),注释掉的是在外部中断基础上配的

[复制链接]

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2019-7-20
在线时间
26 小时
发表于 2019-7-30 09:21:25 | 显示全部楼层 |阅读模式
1金钱
#include "sys.h"
#include "usart.h"
#include "delay.h"

#define GPIO_A 0
#define GPIO_B 1
#define GPIO_C 2
#define GPIO_D 3
#define GPIO_E 4
#define GPIO_F 5
#define GPIO_G 6
#define FTIR   1  //下降沿触发
#define RTIR   2  //上升沿触发
#define PA0    PAin(0)

//   sys.h 里有 中断优先级先不看,手册没讲寄存器
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
        u8 EXTADDR;
        u8 EXTOSET;
        EXTADDR|=BITx/4;
        EXTOSET|=(BITx%4)*4;//移到相应组里
        RCC->APB2ENR|=0X01;  //开启AFIO使能
        AFIO->EXTICR[EXTADDR]&=0XFFF0<<EXTOSET;
        /*    stm32f10x.h里每个组16位,对应中断位开始都被置了1,32中文参考手册那里选PA~G是没有1111的  所以先将那组清零,为下一步      */       
        AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOSET;
        /*  设置是PA~G的哪个 */
        //哪个IO口呢,下面
        EXTI->IMR|=1<<BITx;//开启哪个中断线
       
        if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx上事件下降沿触发
        if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//line BITx上事件上升降沿触发
}
       
void key_init()
{
        RCC->APB2ENR|=1<<2;
        GPIOA->CRL&=0XFFFFFFF0;
        GPIOA->CRL|=0X00000008;        //PA0下拉
}

void led_init()
{
        RCC->APB2ENR|=1<<3;
        GPIOB->CRL&=0XFF0FFFFF;
        GPIOB->CRL|=0X00300000;//PB5推挽
        PBout(5)=1;
}

int main(void)
{

Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,115200); //串口初始化为 115200
        key_init();
        led_init();
        MY_NVIC_Init(2,3,EXTI0_IRQn,2);        //抢占2,子优先级3,组2  
//        MY_NVIC_Init(2,3,EXTI1_IRQn,2);
Ex_NVIC_Config(GPIO_A,0,RTIR);       
//Ex_NVIC_Config(GPIO_A,1,RTIR);       
       
               
        while(1)
        {
                //EXTI->SWIER|=1<<1;
                //delay_ms(300);
               
        }
}


void EXTI0_IRQHandler()
{
        delay_ms(10);
        if(PA0==1)
        {
                PBout(5)=~PBout(5);
        }
        EXTI->PR=1<<0; //清除对应中断标志
}

//void EXTI1_IRQHandler()
//{
//       
//       
//                PBout(5)=~PBout(5);
//       
//        EXTI->PR=1<<1; //清除对应中断标志
//}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表