完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
希望实现的效果是: 一个引脚源源不断的输出时钟电平,对其它引脚进行的操作不影响该引脚。 但是C语言是顺序走流程的呀,只能把一件事做完才能做另一件事。这该怎么办呢?需要写多线程么?该从哪里调用相关的东西呢? |
|
相关推荐
7个回答
|
|
你说的应是一个引脚不断输出一个频率信号,其他引脚做他们该做的事情么?
那请用定时器中的PWM功能把,CPU配置好定时器模块后,它就会自动的从你配置的IO口发送方波信号出去。在不改变频率和占空比的情况时,CPU无需对定时器及定时器所用到的IO口进行任何操作。 没什么多线程的意思,你想多了而已。 评分
|
||
|
||
你想说的“多线程”其实应该理解成”多任务“吧
单片机裸机实现所谓的”多任务“是很容易的事情 学术一点的叫法叫”前后台系统“,通俗的说法就是 ”无限循环“ + ”中断“ 下图可以很清楚的说明 因为单片机的处理速度很快(虽然相对高端CPU很慢很慢),所以我们可以在需要执行更重要的任务的时候打断正在执行的相对没那么重要的任务,在重要任务执行完之后再返回执行之前的任务。 这就是”中断“的基本理念。而且”中断“可以嵌套,高优先级的中断可以打断低优先级的中断,执行完之后再返回低优先级的中断。如图所示。 所以我们一般把对实时性要求不高,处理起来相对复杂的任务放在我们的while(1)中,而对需要及时响应或者由时间触发,外部触发的任务放在不同的中断中完成。 当然,有些中断中只是及时响应和接收信息,完成最基本的处理,然后设置标志位,具体的复杂处理可能依然放在后台进行,因为中断处理一般情况下都要尽可能的简短。 所以本质上虽然单片机都是顺序执行的,但是我们可以使其宏观上看作是在多任务执行。 具体到你的问题。首先,你的时钟输出管脚应该设置成推挽输出。编程控制改变GPIO管脚输出电平之后其电平可以一直保持。你这个时钟输出应该是跟时间有关,而且你的操作指示改变点电平之类的简单操作,也不用一直在原地等待。所以这部分应该用定时器中断触发,而且你这个中断的优先级应该相对比较高(不被其他任务干扰)。而其他引脚的操作可以放在后台的while(1)或者其他中断中。 评分
|
||
|
||
方法1:使用定时器中断,到时间翻转一下io的电平,主程序爱干嘛干嘛。
方法2:使用定时器输出,配置好后就全自动输出电平了,不关主程序什么事。 方法3:很多单片机(如stm32)自带时钟输出功能 |
|
|
|
只可以用定时器中断
|
|
|
|
统一,这个只能定时中断了,其实楼二和楼三已经解答的很好了
|
|
|
|
操作寄存器
|
|
|
|
也可以用任务快速切换实现
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1781 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1192 浏览 0 评论
2697 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2468 浏览 3 评论
5145 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-9 08:46 , Processed in 0.501339 second(s), Total 57, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号