STM32L4 为啥EXTI_SWIER1 寄存器置位不能软触发中断
在官方论坛上也有在问的:
https://community.st.com/s/question/0D50X00009XkfHrSAJ/software-interrupt-on-stm32l4
大概意思是需要先使能才能触发,我确认已经使能EXTI;
是因为NIVC 函数有bug?
我想软触发 EXTI22 也就是比较器2的中断:
不知道有没有大神遇到;
这是外部中断吧,是不是需要硬件触发才行?
说实话,直接操作寄存器可太难了,还得对手册
楼主的软触发是指的什么?定时器触发吗?
是用定时器触发中断吗? 属实需要使能,还需要IO配置才行
比较器的话好像官方有例程的吧,楼主可以看看
用cubemx配置一下试试呢?我觉得cubemx的功能很是强大的
这个没遇到过,但是我知道配置一般可以用cubemx来实现,能好点
正常来说nivc应该是没有bug的吧
你可以仿真看看,是否使能EXTI成功了呗
比较器也需要外部中断触发吧?
后面又可以了,我忘记怎么解决了 外部中断吧 就是通过软件方式操作触发外部中断事件 进而产生中断,应该是可以的。
明天我验证后贴代码过来。
比较器也需要外部中断触发吧?
后面又可以了。 我用的EXIT2,
__HAL_RCC_SYSCFG_CLK_ENABLE();
EXTI->IMR1 |=0x0004;
HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
void EXTI2_IRQHandler(void)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_2);
HAL_GPIO_WritePin( GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(300);
HAL_GPIO_WritePin( GPIOA,GPIO_PIN_5, GPIO_PIN_RESET );
}
我在定时器中断里软件触发EXTI2,
void TIM1_UP_TIM16_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_UP_TIM16_IRQn 0 */
/* USER CODE END TIM1_UP_TIM16_IRQn 0 */
HAL_TIM_IRQHandler(&htim1);
/* USER CODE BEGIN TIM1_UP_TIM16_IRQn 1 */
EXTI->SWIER1 |=0x0004;
/* USER CODE END TIM1_UP_TIM16_IRQn 1 */
}
测试OK. 供参考。
用cubemx配置一下试试 要使能的吧