Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
[已解决,可以当笑话看]stm32中使用中断遇到的问题
发布于 2012-06-11 11:10:46 浏览:9857
订阅该版
rtt并没有在cortex m3中给中断统一接口,从usart和touch中的用法来看,stm32中运用中断应该和不使用操作系统时基本相同。所以就用以下程序启用exti3,但是遇到一些问题。 ``` void Sensor_Interrupts_Config(void)// { NVIC_InitTypeDef NVIC_InitStructure; /* Enable the EXTI3 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } #define GPIO_VSYNC_CMOS GPIOC #define RCC_APB2Periph_GPIO_VSYNC_CMOS RCC_APB2Periph_GPIOC #define GPIO_PIN_VSYNC_CMOS GPIO_Pin_3 #define EXTI_LINE_VSYNC_CMOS EXTI_Line3 #define GPIO_PORT_SOURCE_VSYNC_CMOS GPIO_PortSourceGPIOC #define GPIO_PIN_SOURCE_VSYNC_CMOS GPIO_PinSource3 void Sensor_EXTI_Config(void { EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig(GPIO_PORT_SOURCE_VSYNC_CMOS, GPIO_PIN_SOURCE_VSYNC_CMOS); EXTI_InitStructure.EXTI_Line = EXTI_LINE_VSYNC_CMOS; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising ; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); EXTI_GenerateSWInterrupt(EXTI_LINE_VSYNC_CMOS); } sensor_init {//gpio在之前已经全部初始化 Sensor_EXTI_Config(); rt_kprintf("exti "); Sensor_Interrupts_Config(); rt_kprintf("interrupt "); } ``` 不懂能不能在线程中开启中断。经过尝试,发现如果在一个线程中调用sensor_init,那么rt_kprintf("interrupt ")这个指令始终不被执行,程序进入NVIC_Init(&NVIC_InitStructure)后没有再退出。觉得是因为NVIC_Init中的assert导致的,但是没看出NVIC_InitStructure的配置有什么问题。 又尝试在rt_application_init的开头运行,结果rt_kprintf("interrupt ")这个指令正常输出,程序没有停留在NVIC_Init中,但是奇怪的是,调度器貌似不工作,其它所有线程都不能正常执行。不知道是不是因为NVIC_Init的时候会影响的到其它的中断。 touch的中断使用的是exti1,注册设备的时候,放在设备的init中。当rt_init_thread_entry中执行rt_device_init_all()的时候,应该就会执行rtgui_touch_init,并初始化exti1。这样看来,应该完全可以在线程中配置并开启中断。 研究了好久没法解决。。求教 ///////////折腾一天终于解决了。。。而且很搞笑。。大家当笑话看吧。。见7L。。
查看更多
15
个回答
默认排序
按发布时间排序
aozima
2012-06-11
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
打开固件库的assert。 能停下来,说明已经打开了,那么直接看停在哪。
yuyi1005
2012-06-11
这家伙很懒,什么也没写!
>打开固件库的assert。 > 能停下来,说明已经打开了,那么直接看停在哪。 --- 把assert关了,照样停在NVIC_Init(&NVIC_InitStructure)里面。。不知道为什么。。而且别的线程也停了。。 这个程序不用rt的时候是正常的,我今天把它移植到rt上,结果中断出问题了。。 我又试了这个: ``` level = rt_hw_interrupt_disable(); Sensor_Interrupts_Config(); rt_kprintf("sensor interrupt "); rt_hw_interrupt_enable(level); rt_kprintf("aaaa "); ``` 结果rt_kprintf("sensor interrupt ")有输出,rt_kprintf("aaaa ")没输出。同样其它线程全停了。 编译的时候提示application.c(134): warning: #223-D: function "rt_hw_interrupt_disable" declared implicitly是不是因为这个函数是用汇编写的?
aozima
2012-06-11
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
你的中断服务函数在哪? 没有执行fun后面的内容不代表程序死在fun里面。 你只需要看一下MCU的PC到底指在哪的。 从概率上讲,凡是说“这个程序不用RT-Thread是正常的,用了就不正常。” 最后的结果都是程序写得不对。 目前为止还没有一例是因为RT-Thread把用户程序变得不正常了。 中断相关: 中断向量 中断服务程序
yuyi1005
2012-06-11
这家伙很懒,什么也没写!
我知道不是rtt的问题。 中断服务 ``` void EXTI3_IRQHandler(void) { rt_kprintf("exti3"); } ``` 没有被执行。 中断向量在库中已经写好了吧。。nvic也初始化了。。这些我没改。我再试试。。
yuyi1005
2012-06-12
这家伙很懒,什么也没写!
好吧。我把EXTI的GPIO口空出来,结果其它线程都可以正常执行。用EXTI_GenerateSWInterrupt产生一个软中断,结果中断一产生就卡住了。没有进入EXTI3_IRQHandler。
yuyi1005
2012-06-12
这家伙很懒,什么也没写!
其实出错的原因很简单。。。。。我在stm3210x_it中加入了exti3_irqhandle,然后: ``` void EXTI2_IRQHandler(void) { extern void enc28j60_isr(void); /* enter interrupt */ rt_interrupt_enter(); enc28j60_isr(); /* Clear the Key Button EXTI line pending bit */ EXTI_ClearITPendingBit(EXTI_Line2); /* leave interrupt */ rt_interrupt_leave(); } #endif //——我就是把代码加在这个地方的,还以为#ifdef已经结束了。 #if (STM32_ETH_IF == 1) /******************************************************************************* * Function Name : EXTI4_IRQHandler * Description : This function handles External lines 9 to 5 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ ``` 但是没想到。。。网络功能的宏一直到EXTI4末尾才结束!!!于是我的EXTI3的处理程序就没有被编译进去,,结果。。。。。。。。
aozima
2012-06-12
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
``` while(1); ``` [s:175] 也许你该买个JTAG仿真器了。
yuyi1005
2012-06-12
这家伙很懒,什么也没写!
我有jtag但是不会用。。怎么调试。。有没什么文献参考(我用keil)
aozima
2012-06-13
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
最好的“文献参考”就是 keil-->help
prife
2012-06-13
这家伙很懒,什么也没写!
其实就是跟VC上一样的,设置断点,查看变量。
撰写答案
登录
注册新账号
关注者
0
被浏览
9.9k
关于作者
yuyi1005
这家伙很懒,什么也没写!
提问
3
回答
14
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
EtherKit快速上手PROFINET
2
RTThread USB转串口无法接收数据
3
HC32F4A0 SD卡挂载及热插拔的实现
4
vscode插件 - RT-Thread Studio项目助手 | 跨平台开发
5
Console串口使用说明
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部