首页 > 编程知识 正文

中断激活寄存器,nvic配置中断源

时间:2023-05-05 11:57:37 阅读:41258 作者:3881

步骤

RCC、NVIC、GPIO、USART、EXIT配置GPIOA.0 为按键

GPIO用作EXTI外部中断时,需要打开AFIO

#ifdef VECT_TAB_RAM

nvic _ setvectortable (nvic _ vect tab _ ram,0x0000000;

#else

nvic _ setvectortable (nvic _ vect tab _ flash,0x0);

代码#endif的原因

首先,因为代码可以在RAM中执行,所以中断向量也在RAM中。 此时,需要这个功能。 例如,通过将程序下载到RAM而不是FALSH,可以避免每次重新编译程序和调试时FLASH“磨损”。

第二,根据APP应用程序的不同,可能需要一个中断向量表,可以在运行时修改。 这种情况下也需要这个功能

GPIOX.0 EXTI0

EXTI0—EXTI1—EXTI2—EXTI1—EXTI0

int main () )

{

RCC_Config (;

NVIC_Configuration (;

GPIO_Configuration (;

USART_Configuration (;

EXTI_Configuration (;

wile(1;

}

voidRCC_config(void ) )。

{

省略

}

RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpioa|RCC _ AP B2 per iph _ usar t1|RCC _ AP B2 per iph _ afio,ENABLE ) )

(;

语音用户配置(语音)。

{

usart _ inittypedefusart _ init structure;

usart _ init structure.usart _ baudrate=115200;

usart _ init structure.usart _ word length=usart _ word length _ 8b;

usart _ init structure.usart _ stop bits=usart _ stop bits _ 1;

usart _ init structure.usart _ parity=usart _ parity _ no;

usart _ init structure.usart _ hardware流控制=usart _ hardware流控制_ none;

usart _ init structure.usart _ mode=usart _ mode _ rx|usart _ mode _ tx;

usart_init(usart1,USART_InitStructure );

usart_cmd(usart1,ENABLE );

}

voidNVIC_configuration(void ) )。

{

nvic _ inittypedefnvic _ init structure;

#ifdef VECT_TAB_RAM

nvic _ setvectortable (nvic _ vect tab _ ram,0x0);

#else

nvic _ setvectortable (nvic _ vect tab _ flash,0x0);

#endif

nvic _优先级组配置(nvic _优先级组_ 2;

nvic _ init structure.nvic _ IRQ channel=exti0_ irqn;

nvic _ init structure.nvic _ irqchannelpreemptionpriority=2;

nvic _ init structure.nvic _ irqchannelsubpriority=0;

nvic _ init structure.nvic _ irqchannelcmd=enable;

nvic _ init (nvic _ init结构;

nvic _ init structure.nvic _ IRQ channel=exti1_ irqn;

nvic _ init structure.nvic _ irqchannelpreemptionpriority=1;

nvic _ init structure.nvic _ irqchannelsubpriority=0;

nvic _ init structure.nvic _ irqchannelcmd=enable;

nvic _ init (nvic _ init结构;

nvic _ init structure.nvic _ IRQ channel=exti2_ irqn;

nvic _ init structure.nvic _ irqchannelpreemptionpriority=0;

nvic _ init structure.nvic _ irqchannelsubpriority=0;

nvic _ init structure.nvic _ irqchannelcmd=enable;

nvic _ init (nvic _ init结构;

}

void GPIO_Configuration(void )

{

gpio _ inittypedefgpio _ init structure;

gpio _ init structure.gpio _ pin=gpio _ pin _0| gpio _ pin _1| gpio _ pin _ 2;

gpio _ init structure.gpio _ mode=gpio _ mode _ in _ floating;

gpio_init(gpioa,GPIO_InitStructure );

gpio _ extilineconfig (gpio _ portsourcegpioa,GPIO_PinSource0);

gpio _ extilineconfig (gpio _ portsourcegpioa,GPIO_PinSource1);

gpio _ extilineconfig (gpio _ portsourcegpioa,GPIO_PinSource2);

gpio _ init structure.gpio _ pin=gpio _ pin _ 9;

gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz;

gpio _ init structure.gpio _ mode=gpio _ mode _ af _ PP;

gpio_init(gpioa,GPIO_InitStructure );

gpio _ init structure.gpio _ mode=gpio _ mode _ in _ floating;

gpio _ init structure.gpio _ pin=gpio _ pin _ 10;

gpio_init(gpioa,GPIO_InitStructure );

}

voidexti_configuration(void ) )。

{

exti _ inittypedefexti _ init structure;

exti _ init structure.exti _ line=exti _ line0| exti _ line1| exti _ line 2;

exti _ init structure.exti _ mode=exti _ mode _ interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发和按钮按下

exti _ init structure.exti _ line cmd=enable;

exti _ init (exti _ init结构;

}

输入输出(输入,文件* f ) )。

{

usart_senddata(usarT1,) u8 ) ch );

while (usart _ getflagstatus (usar t1,USART_FLAG_TC )==RESET );

返回通道;

}

voide xti0_ IRQ处理程序(void ) )。

{

printf((r(n1.) r ) n );

exti _ generateswinterrupt (exti _ line 1;

printf((r(n6 ) r ) n ) );

EXTI_clearflag(EXTI_line0;

}

voide xti1_ IRQ处理程序(void ) )。

{

printf((r ) N2.(r ) n );

exti _ generateswinterrupt (exti _ line 2;

printf((r(n5 ) r ) n ) );

EXTI_clearflag(EXTI_line1;

}

voide xti2_ IRQ处理程序(void ) )。

{

printf((r(n3.) r ) n );

printf((r(n4 ) r ) n ) );

EXTI_clearflag(EXTI_line2;

}

实验现象

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。