再看串口通信(完成):
今天在QQ群里聊天时,一哥们问到如果使用代码生成工具生成串口工程时关于中断的配置,当时我的回答是直接将最后一项关于中断调用函数的钩去掉即可。晚上回来试验了一下,结果却不然。现将测试的结果和新的方法放在这里交流一下并在最后加上两个工程文件的代码(其中一个只使用串口接收中断,另一个一个关于串口的中断也不使用,全部采取查询方式),具体的测试如下:
step1 -- 代码生成工具截图(图中都未钩选中断所要调用的函数功能):
上图选择使用串口0,具有发送和接收功能。
配置串口接收功能不使用中断函数(我的个人理解,最开始即理解成了关闭中断功能)(其实这里不是配置中断功能,见最后面的说明)。
配置串口发送功能也不使用中断调用函数的功能(其实这里不是配置中断功能,见最后面的说明)。
。
Step2 -- 查看相关的代码:
那么具体如何修改,就是按照串口初始化的开始给对应的寄存器写值就可以禁止相应的中断了。当然你想禁止的才写,比如我们一般都会使用串口的接收中断,那样的话就应该是:
STIF0 = 0U; // 先把相应的中断标志位都清除了
SRIF0 = 0U;
SREIF0 = 0U;
STMK0 = 1U; // 关闭发送中断
STMK0 = 0U; // 使能接收中断
SREMK0 = 1U; // 关闭接收错误中断
这样就可以了,感觉好像也没有什么东西写啊。
暂时测试失败了-----还是看一下PDF吧!
接着上面的测试,注明,以上分析暂时没有问题,只是以下分析刚开始没有发现,我们再仔细看看他的串口发送函数吧:
改一下串口发送函数后就再也不进入中断函数了(经测试):
至于接收中断与接收错误中断嘛,接着看下面:
从其接收函数来看,串口的接收还算比较老实,没有在接收里面开关中断什么(可能因为这样做没有意义)。那么这样看来,我们只需要在串口的启动函数里面修改禁止或使能串口的接收与接收错误中断即可了?答案是肯定的,因为测试过。不过到这里看到上面这图,相信大家也清楚了在代码生成工具中的最后一项"CallBack Function Setting"了吧,不是什么中断开关,而是问你是否在产生该中断时调用某些定义好的函数(某些系统中会用到)。好了,现在该发表一些个人观点(总结)了:
测试报告:如果你使用的是代码生成工具构建基本的程序框架,那么请注意:对于串口来说,代码生成工具默认开启所有中断(发送中断、接收中断、接收错误中断),而且,如果要使用某外设的话必须调用相应的启动函数(串口的中断配置也在启动函数里面)。要想禁止串口的相关中断,如果只是针对接收中断和接收错误中断的话直接在启动函数里面修改即可,如果是发送中断的话,不仅要修改启动函数中的配置还要修改其发送函数。大概就这样了,睡觉(做梦时我会感谢今天在群里发问的那个哥们,让我写了这么多东西!)
当然,好像说过要上程序的,那肯定要上,因为默认中断开完了的,再上传一个全部使用中断的也没意思,所以就上传一下发送采样查询,接收采用中断的吧(接收想要查询的话可以模仿发送来写,但一般情况下为了实时性更高点,接收都是采用的中断方式):
——回复可见内容——
今天在QQ群里聊天时,一哥们问到如果使用代码生成工具生成串口工程时关于中断的配置,当时我的回答是直接将最后一项关于中断调用函数的钩去掉即可。晚上回来试验了一下,结果却不然。现将测试的结果和新的方法放在这里交流一下并在最后加上两个工程文件的代码(其中一个只使用串口接收中断,另一个一个关于串口的中断也不使用,全部采取查询方式),具体的测试如下:
step1 -- 代码生成工具截图(图中都未钩选中断所要调用的函数功能):
上图选择使用串口0,具有发送和接收功能。
配置串口接收功能不使用中断函数(我的个人理解,最开始即理解成了关闭中断功能)(其实这里不是配置中断功能,见最后面的说明)。
配置串口发送功能也不使用中断调用函数的功能(其实这里不是配置中断功能,见最后面的说明)。
。
Step2 -- 查看相关的代码:
那么具体如何修改,就是按照串口初始化的开始给对应的寄存器写值就可以禁止相应的中断了。当然你想禁止的才写,比如我们一般都会使用串口的接收中断,那样的话就应该是:
STIF0 = 0U; // 先把相应的中断标志位都清除了
SRIF0 = 0U;
SREIF0 = 0U;
STMK0 = 1U; // 关闭发送中断
STMK0 = 0U; // 使能接收中断
SREMK0 = 1U; // 关闭接收错误中断
这样就可以了,感觉好像也没有什么东西写啊。
暂时测试失败了-----还是看一下PDF吧!
接着上面的测试,注明,以上分析暂时没有问题,只是以下分析刚开始没有发现,我们再仔细看看他的串口发送函数吧:
改一下串口发送函数后就再也不进入中断函数了(经测试):
至于接收中断与接收错误中断嘛,接着看下面:
从其接收函数来看,串口的接收还算比较老实,没有在接收里面开关中断什么(可能因为这样做没有意义)。那么这样看来,我们只需要在串口的启动函数里面修改禁止或使能串口的接收与接收错误中断即可了?答案是肯定的,因为测试过。不过到这里看到上面这图,相信大家也清楚了在代码生成工具中的最后一项"CallBack Function Setting"了吧,不是什么中断开关,而是问你是否在产生该中断时调用某些定义好的函数(某些系统中会用到)。好了,现在该发表一些个人观点(总结)了:
测试报告:如果你使用的是代码生成工具构建基本的程序框架,那么请注意:对于串口来说,代码生成工具默认开启所有中断(发送中断、接收中断、接收错误中断),而且,如果要使用某外设的话必须调用相应的启动函数(串口的中断配置也在启动函数里面)。要想禁止串口的相关中断,如果只是针对接收中断和接收错误中断的话直接在启动函数里面修改即可,如果是发送中断的话,不仅要修改启动函数中的配置还要修改其发送函数。大概就这样了,睡觉(做梦时我会感谢今天在群里发问的那个哥们,让我写了这么多东西!)
当然,好像说过要上程序的,那肯定要上,因为默认中断开完了的,再上传一个全部使用中断的也没意思,所以就上传一下发送采样查询,接收采用中断的吧(接收想要查询的话可以模仿发送来写,但一般情况下为了实时性更高点,接收都是采用的中断方式):
——回复可见内容——
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |