完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我写的一个程序,只开了接收中断,没开发送中断,但是函数在调用USART3发送程序的时候进了中断,并且出了后,又进去,不停的进进出出啊,想不通啊。USART3配置代码看图:时钟开启 |
|
相关推荐
10个回答
|
|
自顶防沉自顶防沉自顶防沉自顶防沉自顶防沉
|
|
|
|
|
|
|
|
是这样的,上面也有清中断标志(虽然放在了后面),只不过切断点单步显示没有进if所以和这个语句应该没关系,也就是没有触发接收中断,必然是其它中断源进的中断,在usart_putstring中while语句进的中断,可是我没有开其它中断,搞不清楚中断源哦,想了老长时间。 |
|
|
|
羊斩熊 发表于 2016-3-30 10:36 我看你中断服务函数只有一个if语句而已啊,你把清标志位放进去了?是if语句的第二个函数中么? 如果是这样?你进入中断,if语句没有执行,当然也没有清标志位。 |
|
|
|
gniquhs 发表于 2016-3-30 10:53 是啊,中断服务函数里的if语句就是判断有没有发生串口接收中断,我只开了这一个中断哦,但是不知道什么原因,在调用usart_putstring时运行到while后也会进入中断,不知道是什么中断,也不知道清哪个标志位哟。按理讲,我只开了串口接收中断,为什么还有其它中断源触发串口中断呢? |
|
|
|
羊斩熊 发表于 2016-3-30 13:54 我不太明白你讲的什么意思。总之,你在if语句之前清中断标志位试试看。 中断服务函数中应该放发生中断之后该干的事,不知道你为啥还要判断? 如果只有一个中断,程序思路: ************************************** main(){ 始化系统; 开中断标志位; 。。。 } interrupt service(){ 清中断位; 串口接收准备,接收数据; } ******************************************** |
|
|
|
gniquhs 发表于 2016-3-30 14:29 你讲的很有道理~不过中断可能由好几种中断源触发产生,如果我开了好几个中断源,进了同一个中断服务函数,我怎么知道是哪个中断源引起的呢?这时候就需要用if来判断了。虽然我这里只开了串口接收中断,加不加if无所谓,但是如果发生了串口接收中断有if也没什么影响吧?何况现在这还不是重点,重点是我只开了串口接收中断,但是有其它中断源触发了中断进入了中断函数,不进入if,说明产生的不是串口接收中断,但是我只开了这个。我也想清标志位啊,但是清哪个标志位之前是不是应该搞清楚触发的是哪个中断啊。。。我啰嗦了 |
|
|
|
羊斩熊 发表于 2016-3-30 15:09 那我只能说你得仔细排查你到底是不是只开了这一个中断 |
|
|
|
|
|
|
|
中断配置函数里清除一下USART3的中断标志
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1168 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1105 浏览 2 评论
2203 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1297 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1718 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 23:14 , Processed in 0.640568 second(s), Total 61, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号