Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32F103x把指定中断优先级的寄存器减少到4位,写出这4个寄存器位的分组方式。
时间: 2023-03-20 14:02:55 浏览: 94
STM32F103x使用基于NVIC的优先级分组方式来指定中断源的优先级。在这种方式下,使用了4个寄存器位来指定中断源的优先级,这4个寄存器位被分为两个组。
具体来说,STM32F103x使用了以下的分组方式:
- 前两个寄存器位表示组优先级,后两个寄存器位表示子优先级;
- 组优先级的值越小,优先级越高;
- 子优先级的值越小,优先级越高;
- 在同一组中,所有中断源的优先级相同,但是可以使用不同的子优先级来实现中断源之间的优先级区分。
因此,STM32F103x使用了4位寄存器来实现8个不同的优先级级别。具体的分组方式如下所示:
|组优先级|子优先级|
|--------|--------|
| 0 | 0 |
| 0 | 1 |
| 0 | 2 |
| 0 | 3 |
| 1 | 0 |
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
相关问题
stm32f103c8t6寄存器配置外部中断
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,它支持丰富的外设资源,包括GPIO用于配置外部中断。要配置外部中断,你需要按照以下步骤操作:
1. **GPIO初始化**:
首先,需要配置GPIO作为输入模式,并启用中断功能。例如,如果你想要使用PA0引脚作为中断源,可以使用`GPIO_InitStructure`结构体设置GPIOB的PB0为输入并允许中断:
```c
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PB0 (对应PA0)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 输入浮空模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_NOPULL; //无上拉下拉
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
```
2. **EXTI初始化**:
EXTI(External Interrupt Line)模块负责处理外部中断请求。需要配置EXTI线和相应的中断优先级。比如配置EXTI线0连接到PB0:
```c
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0; // 对应EXTI线0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 异步边沿触发中断
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // 上升沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 开启EXTI线
HAL_EXTI_Init(&EXTI_InitStructure);
```
3. **INTERRUPT_vect配置**:
需要在对应的中断服务函数中处理中断事件。这里假设你已经声明了`void EXTI0_IRQHandler(void)`函数:
```c
void EXTI0_IRQHandler(void) {
// 当PA0检测到外部信号上升沿时,这里的代码将被执行
// ... 处理中断逻辑
}
// 在你的主程序中,注册中断服务函数:
NVIC_SetVector(EXTI0_IRQn, (uint32_t)&EXTI0_IRQHandler); // 设置中断向量表地址
NVIC_EnableIRQ(EXTI0_IRQn); // 启动EXTI0中断
```
4. **系统中断向量管理**:
最后别忘了开启中断和全局中断系统:
```c
HAL_NVIC_SetPriorityGrouping(NVIC Priority Grouping_4); // 使用高优先级组
HAL_NVIC_EnableIRQ(IN NVIC_SYSTICK_IRQn); // 先使能系统时钟定时器中断
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 然后使能你的中断
```
stm32f103控制寄存器
STM32F103系列微控制器是一个基于ARM Cortex-M3内核的32位微控制器,它包含大量的控制寄存器(Control Registers),用于管理和配置硬件资源、设置工作模式以及监控系统状态。
控制寄存器大致可以分为以下几个部分:
1. 系统控制寄存器(如SYSCTRL):管理电源、复位、时钟树等基本功能,比如RTC时钟配置、低功耗模式设置等。
2. 内部总线控制寄存器(如APBxRSTR):控制各种 peripheral bus(例如APB1和APB2总线)的启动和停止。
3. GPIO控制寄存器(GPIOx_BSRR、GPIOx_LCKR等):用于配置和操作通用输入输出(GPIO)端口,包括设置方向、推挽输出和中断等。
4. 串行通信控制寄存器(如USARTx_CR1/CR2):负责串口的发送和接收控制,数据格式设定等。
5. 外设中断寄存器(如EXTI线和DMA请求):管理外部中断源和 DMA 请求。
6. 中断管理控制寄存器(如NVIC_PriorityGroupConfig):设置中断优先级组和全局中断使能。
7. 闪存和RAM访问控制寄存器:如FLASH_ACR、FLASH_OPTCR等,用于Flash的读写操作和选项设置。
每个具体的控制寄存器都有其特定的功能,通过它们你可以精确地配置微控制器的工作环境并操作外设。使用前需要参考详细的STM32官方手册了解各个寄存器的具体结构和用途。
阅读全文