STM32F103C8T6 USB寄存器开发详解(3)-中断

对于USB模块,因为其通讯流程比较复杂,因此配置硬件中断就显得很重要了.

STM32F103的中断寄存器位于另一个手册中,也就是下方蓝色标题的链接地址.

NVIC寄存器用于启用中断,中断向量表中有两个USB相关中断,从机设备仅需要RX中断,也就是表项20.因此只需要配置NVIC_ISER0寄存器的位20即可开启USB模块中断,至于中断优先级分组等情况,可以直接使用默认配置,若有需要可以手动配置其余NVIC与SCB寄存器来设置中断优先级.

配置完这些,就可以直接回到USB章节,继续配置USB_CNTR寄存器,使USB外设在特定情况下才会触发中断.我们只需要传输中断和复位中断就可以了.

(这里讲一下复位,复位就是将USB模块重置到初始状态,也就是除了分区缓冲区里面的内容,其余寄存器都会变成复位值,这个在枚举过程中会用到)

配置完这些就差不多了,最后在配置一下中断表就可以了.中断表位于.s启动文件里面(startup_stm32f10x_md.s),因为中断表编译后会处于代码区,所以需要编译前进行配置,编译后就不能再改动了.

可以看到中断表内USBRX函数是"USB_LP_CAN1_RX0_IRQHandler",只需要在前面用.extern符号声明一下,函数是从外部导入的即可

小结:

1.配置启动文件的中断表,使用外部函数替换表项

.extern    USB_LP_CAN1_RX0_IRQHandler

2.实现中断初始化函数,并实现中断接收处理函数

(这个时候可以在处理函数内添加一下打印,然后运行代码,然后再将单片机typec口与电脑USB口链接,正常情况会触发中断)


/*USB中断初始化*/
void USBInterrupt()
{
	/*NVIC寄存器*/
	*(uint32_t*)0xE000E100 |= (1 << 20);   //USBRX中断(从机仅需要RX中断)


	//USB模块,允许RX中断与复位中断
	*(uint32_t*)0x40005C40 |= 0x0400;
	*(uint32_t*)0x40005C40 |= (1 << 15);
}


/*USB接收中断处理*/
void USB_LP_CAN1_RX0_IRQHandler(void)
{
   
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值