打印
[STM32F1]

能否用STM32F103完成如下功能?

[复制链接]
1381|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
摸摸|  楼主 | 2019-10-18 21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚学单片机,有很多东西不懂,现在想做个东西,有如下需求:
1  单片机使用3个引脚,一个输出,两个输入,引脚目前还没指定端口,可以任选.
2  输出脚为时钟脚,输出的时钟必须为晶振频率(即单片机时钟)的1/4或1/8.
3  输出的时钟有脉冲个数限制,比如输出1M个,或4M个,程序内可调.但是必须精确到1个.
4  两个输入脚用于计数,计算在输出时钟信号的这段时间内的上升沿次数(其实就是统计跳变了几次1).计数脉冲的频率不会超过输出的时钟频率,最高只会等于时钟频率.计数精度也要精确到1个.

计数前端电路这里不考虑,另外有电路会在计数开始前将两个输入脚电平清零.
我现在就是不知道如何让单片机准确又准时的输出N个脉冲,还有不知道单片机能否那么快的计数.

使用特权

评论回复
沙发
cry1109| | 2019-10-19 11:45 | 只看该作者
stm32可以输出时钟,如果你那个输出引脚用来输出时钟那么只能选stm32的那个时钟输出引脚,可以看一下数据手册是哪个引脚可以输出时钟;
输出的时钟源可以选择,所以你选择输出的时钟源不同,那么经过1/4分频或者1/8分配后输出的时钟频率也不同;
至于对输出指定个数的时钟脉冲,没搞过,而且误差为1个,精度太高了,stm32最高系统频率72MH如果1/4分频后最高输出18MHz时钟,可以通过你输入引脚的外部中带对输出的时钟脉冲个数计数,计数达到指定的脉冲个数后关闭时钟输出,如果输出频率太高,至于数不数的过来没试过。
计算上升沿跳变次数,简单点直接使用外部中断即可,复杂点使用stm32的输入捕获。
你也可以使用PWM脉冲输出代替时钟输出,在输出比较中断中计算脉冲个数,这样精确度获取可以满足你为 1 的要求。

使用特权

评论回复
板凳
airwill| | 2019-10-19 21:56 | 只看该作者
STM32, 广告词说, 释放你的创造力。 就这点要求,轻松搞定的事情

使用特权

评论回复
地板
摸摸|  楼主 | 2019-10-19 22:49 | 只看该作者
cry1109 发表于 2019-10-19 11:45
stm32可以输出时钟,如果你那个输出引脚用来输出时钟那么只能选stm32的那个时钟输出引脚,可以看一下数据手 ...

输出倒是简单,只是这个要求确定了只能用stm32的定时器输出,无法写循环解决,所以确定脉冲个数就成了另一个难题。
如果单用STM32无法解决,那只能搭一堆的逻辑电路了。

使用特权

评论回复
5
cry1109| | 2019-10-19 23:46 | 只看该作者
摸摸 发表于 2019-10-19 22:49
输出倒是简单,只是这个要求确定了只能用stm32的定时器输出,无法写循环解决,所以确定脉冲个数就成了另 ...

如果确定用stm32定时器输出脉冲就好办了,通过定时器输出PWM脉冲,然后打开定时器的输出比较中断,发一个脉冲就会进入一次中断,同时在中断中计一次数,当计数达到指定的个数后后,关闭PWM输出即可。

使用特权

评论回复
6
摸摸|  楼主 | 2019-10-20 10:26 | 只看该作者
cry1109 发表于 2019-10-19 23:46
如果确定用stm32定时器输出脉冲就好办了,通过定时器输出PWM脉冲,然后打开定时器的输出比较中断,发一个 ...

我担心的是中断后只有4个或8个晶振时钟周期,单片机搞不过来,因为还有计数器的端口判断和计数在里面,按设计是4个晶振时钟,如果是8个的话我晶振频率就得翻倍.

使用特权

评论回复
7
cry1109| | 2019-10-21 09:11 | 只看该作者
摸摸 发表于 2019-10-20 10:26
我担心的是中断后只有4个或8个晶振时钟周期,单片机搞不过来,因为还有计数器的端口判断和计数在里面,按设 ...

啥意思啊,我咋有点听不懂了呢。你是担心中断频率太高,导致中断处理函数时间超过中断周期,单片机数不过来了?如果输出的脉冲频率太高有这个可能,不过中断函数里就几条代码,计数器你就搞个静态局部变量count,进入一次中断,count++,后面再跟个if判断计数是否达到指定个数,应该占用不了太多时间。你最好确定一下你要输出的脉冲频率最高为多少。

使用特权

评论回复
8
香水城| | 2019-10-21 11:33 | 只看该作者
这些功能不难实现,STM32家族总有一款适合你!~

使用特权

评论回复
9
antusheng| | 2019-10-21 12:01 | 只看该作者
一个一个的实现就OK了

使用特权

评论回复
10
ruanhongyu| | 2019-10-21 12:21 | 只看该作者
用另一个定时器去记录脉冲数

使用特权

评论回复
11
westmas| | 2019-10-21 21:29 | 只看该作者
主从门控模式

使用特权

评论回复
12
戈卫东| | 2019-10-21 23:00 | 只看该作者
似乎是可以实现的。。。

使用特权

评论回复
13
摸摸|  楼主 | 2019-10-21 23:16 | 只看该作者
cry1109 发表于 2019-10-21 09:11
啥意思啊,我咋有点听不懂了呢。你是担心中断频率太高,导致中断处理函数时间超过中断周期,单片机数不过 ...

脉冲频率至少需要2M,最好能达到5.12M。
如果是决定用逻辑器件搭计数器的话我就打算上10M了。
外部返回的脉冲频率是未知的,很有可能会和输出脉冲一样。
因为我只学会了用STM32CUBE,这个产生的代码在KEIL编译以后执行效率是未知的。我并不知道实际上单片机读完这两个IO的高低电平并完成计数需要几个时钟周期。

使用特权

评论回复
14
cry1109| | 2019-10-22 09:07 | 只看该作者
摸摸 发表于 2019-10-21 23:16
脉冲频率至少需要2M,最好能达到5.12M。
如果是决定用逻辑器件搭计数器的话我就打算上10M了。
外部返回的 ...

5.12MHz是完全没问题的,单片机数的过来

使用特权

评论回复
15
paotangsan| | 2019-11-14 10:11 | 只看该作者
我觉得应该是可以的

使用特权

评论回复
16
labasi| | 2019-11-14 10:13 | 只看该作者
应该没有问题

使用特权

评论回复
17
keaibukelian| | 2019-11-14 10:20 | 只看该作者
没有用过f103

使用特权

评论回复
18
heimaojingzhang| | 2019-11-14 10:23 | 只看该作者
f4肯定是可以的

使用特权

评论回复
19
guanjiaer| | 2019-11-14 10:27 | 只看该作者
我觉得是没有问题的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

1946

帖子

16

粉丝