划重点!嵌入式方向面试题目大汇总(七)
简述一下STM32中断有哪些?
外部中断: STM32 MCU可以通过引脚来检测外部事件,如按键、传感器信号等。当外部事件触发时,引脚将产生电平变化,从而产生外部中断。STM32 MCU提供了多个外部中断线,可以设置中断触发条件和优先级等。
定时器中断: STM32 MCU提供了多个定时器,可以用于产生一定时间间隔的定时中断。通过设置定时器的预分频器和计数器,可以产生不同的定时中断时间。
DMA中断: STM32 MCU提供了DMA(直接内存访问)控制器,可以实现高速数据传输。当DMA传输完成时,可以产生DMA中断,以通知CPU数据已经传输完成。
UART中断: UART(通用异步收发传输器)是STM32 MCU中用于串口通信的模块,可以通过设置UART中断使能来实现串口数据的异步接收和发送。
SPI中断: SPI(串行外设接口)是STM32 MCU中用于连接外部设备的接口,可以通过设置SPI中断使能来实现SPI数据的异步传输和接收。
I2C中断: I2C(串行通信总线)是STM32 MCU中用于连接外部设备的接口,可以通过设置I2C中断使能来实现I2C数据的异步传输和接收。
USB中断: STM32 MCU中提供了USB接口,可以通过设置USB中断使能来实现USB数据的异步传输和接收。
ADC中断: ADC(模数转换器)是STM32 MCU中用于模拟信号采样的模块,可以通过设置ADC中断使能来实现模拟信号的采样和转换。
你对STM32的外部中断有哪些了解?
在STM32芯片中,外部中断可以分为两类:基于线路中断(EXTI)和基于事件中断(EVENTOUT)。
基于线路中断(EXTI)是指在特定的IO管脚上检测到信号变化时,会产生一个外部中断请求,从而触发中断服务程序。在STM32中,可以通过外部中断线(EXTI线)将IO管脚连接到外部中断输入线路。当IO管脚检测到的信号变化满足预定义的条件时(例如上升沿、下降沿、上升/下降沿、高电平、低电平等),就会触发中断服务程序。
基于事件中断(EVENTOUT)是指在芯片内部某个事件发生时,会产生一个外部中断请求,从而触发中断服务程序。在STM32中,事件发生后会向事件输出线路(EVENTOUT)发送事件通知,当事件通知满足预定义的条件时,就会触发中断服务程序。EVENTOUT可以连接到另一个STM32芯片,从而实现多个芯片之间的协作。
以Hal库为例,外部中断需要配置什么参数?
GPIO引脚设置: 设置外部中断所对应的GPIO引脚,选择引脚的输入模式(上拉/下拉/无上下拉)。
NVIC设置: 开启对应的中断通道,设置中断优先级。
外部中断初始化设置: 包括外部中断模式设置(上升沿/下降沿/双边沿触发模式)、中断使能和回调函数设置。
附赠代码一份:
void HAL_GPIO_EXTI_MspInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin : PB10 */
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* 用户自定义的中断处理函数 */
// ...
}
#牛客在线求职答疑中心##数据人的面试交流地#本专栏收录原创嵌入式方向面试宝典,为嵌入式硬件软件工程师岗位的同学提供面试经典题目整理。收录全面更新迅速,值得一阅!