使用的SF32LB525UC6芯片,PA34引脚接入按键下拉,按下时高电平。参考SDK编程指南→RT-Thread 设备驱动→PIN设备的示例1-中断模式。配置这个引脚为上升沿触发,按键按下时在main函数中的每秒的打印引脚电平没有了,像卡死了一样。去掉这个pin_irq()这个初始化函数,按键按下时正常每秒打印高电平 pin_read value=1. 
以开启了#define RT_USING_PIN 1 #define BSP_USING_GPIO 1
static void pin_irq_callback(void *args) {
rt_kprintf(“pin_irq_callback!”);
}
void pin_irq(void)
{
rt_base_t pin_id = GET_PIN(1,34); //Get GPIOA_34 pin id
//Set pin input mode
HAL_PIN_Set(PAD_PA34, GPIO_A34, PIN_PULLDOWN, 1);
rt_pin_mode(pin_id, PIN_MODE_INPUT_PULLDOWN);
//Enable rasing edge interrupt mode
rt_pin_attach_irq(pin_id, PIN_IRQ_MODE_RISING, pin_irq_callback, RT_NULL);
rt_pin_irq_enable(pin_id, 1);
}
int main(void)
{
/* Output a message on console using printf function */
rt_kprintf(“Start Test!\n”);
int v;
rt_base_t pin_id = GET_PIN(1,34);
pin_irq();
while (1)
{
v = rt_pin_read(pin_id);
rt_kprintf(“pin_read value=%d.\r\n”, v);
rt_thread_mdelay(1000);
}
return 0;
}
串口打印
Serial Debug 2025-09-27 100628.txt (722 字节)
诺狞猫
2
不知道你用的是哪种板子,具体死机情况是什么样的。
试了和你一样的代码,没有死机,能够输出pin_read value=1;但是会一直一直进入中断输出"pin_irq_callback!"。
后面换成43号,也会出现类似一直进入中断输出"pin_irq_callback!"问题,但是去掉
HAL_PIN_Set(PAD_PA34, GPIO_A34, PIN_PULLDOWN, 1);这行代码就正常了。你可以试试。
static void pin_irq_callback(void *args) {
rt_kprintf("pin_irq_callback!");
}
void pin_irq(void)
{
rt_base_t pin_id = GET_PIN(1,43); //Get GPIOA_34 pin id
//Set pin input mode
rt_pin_mode(pin_id, PIN_MODE_INPUT_PULLDOWN);
//Enable rasing edge interrupt mode
rt_pin_attach_irq(pin_id, PIN_IRQ_MODE_RISING, pin_irq_callback, RT_NULL);
rt_pin_irq_enable(pin_id, 1);
}
int main(void)
{
rt_kprintf("Start Test!\n");
int v;
rt_base_t pin_id = GET_PIN(1,43);
pin_irq();
while (1)
{
v = rt_pin_read(pin_id);
rt_kprintf("pin_read value=%d.\r\n", v);
rt_thread_mdelay(1000);
}
return 0;
}
感谢回复,我也换成了黄山派板子,使用你下面提供的代码,43引脚。我现在的现象是上电正常每秒打印 pin_read value=0. ,我按下这个43引脚的按键,串口助手里面是没有pin_read value=1.这条打印的,也没有进入中断里面的pin_irq_callback!打印。打印似乎就卡住了,松手之后每秒的打印也是没有了,也没有打印任何报错信息,就像死机了一样,可太奇怪了 
我重新新建了个工程,发现就可以了,正常触发中断。之前的工程唯一的区别就是开启了 Enable ulog 。这是为何会出现这个故障 
开启Enable ISR log.就可以完美解决,但是并没有在中断回调函数中调用log函数,只是开启了但使用了rt_kprintf也会出现故障 
1 个赞
诺狞猫
6
问题可能是这样吧,我也试了一下。开启Enable ISR log 后就正常了。
1 个赞
是的,一旦开了ulog,即使rt_kprintf最终调用的还是ulog的函数