你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 10371|回复: 2

【MCU实战经验】+STM32F407乘,除,开方时间实验

[复制链接]

1

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
2020-11-20
发表于 2014-4-1 20:13:36 | 显示全部楼层 |阅读模式
STM32F407乘,除,开方时间实验、
 
2013 06 01
fluke示波器
主时钟120M,每周期8.3ns
 
 
@@@@实验程序如下:@@@@@@
 
float  ta=3.14f;
float  te;
while(1)
{
 OSTimeDlyHMSM(0,0,0,300);//300ms 延时
 ta*=PI;
 CPU_IntDis();//禁止中断
 GPIO_SetBits(GPIOD,GPIO_Pin_11);//io置1
 ta=ta*ta;//乘法
 ta=ta*ta;
 ta=ta*ta;
 ta=ta*ta;//共100个
 。
 。
 。
 GPIO_ResetBits(GPIOD,GPIO_Pin_11);//io置0
 ta=ta/PI;//除法
 ta=ta/PI;
 ta=ta/PI;
 。
 。
 。//100个
 GPIO_SetBits(GPIOD,GPIO_Pin_11);//io置1
 ta=SQRT(ta);//开方
 ta=SQRT(ta);
 ta=SQRT(ta);
 ta=SQRT(ta);
 。
 。
 。//100个
 GPIO_ResetBits(GPIOD,GPIO_Pin_11);//io置0
 CPU_IntEn();//开中断
 
@@@@@实验结果@@@@@@@@
 
 
★★ 100个乘   6.4us,每个64ns。
一个乘法汇编如下: 共5个周期,理论上时间是(120m主频):41ns/每个
每个与实际差23ns
0x08006B8E ED9D0A01  VLDR          s0,[sp,#0x04]------------2个周期
0x08006B92 EE200A00  VMUL.F32      s0,s0,s0-----------------1个
0x08006B96 ED8D0A01  VSTR          s0,[sp,#0x04]------------2个
 
 
★★ 100个除  18.4us  每个184ns。
共20个周期,理论上时间是:166ns,
与乘法相比,每个差22ns
0x08007066 ED9D0A01  VLDR          s0,[sp,#0x04]--------2个周期
0x0800706A ED5F0A50  VLDR          s1,[pc,#-0x140]------2
0x0800706E EE801A20  VDIV.F32      s2,s0,s1-------------14
0x08007072 ED8D1A01  VSTR          s2,[sp,#0x04]--------2
 
 
★★ 100个开方,16us,每个160ns。
共18个周期,理论上150ns,差10ns   与除相比差16ns,正好符合2个周期时间。
0x0800772A EDDD0A01  VLDR          s1,[sp,#0x04]-------2
0x0800772E EEB10AE0  VSQRT.F32     s0,s1---------------14
0x08007732 ED8D0A01  VSTR          s0,[sp,#0x04]-------2
 
100个sin库函数,79.2us,每个792ns,0.792us。可以。
 
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
忘了是4系列还是1系列的了。
ADC上电延迟一段时间后(tSTAB ),再次设置ADON位时开始进行转换
ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生
成组转换:在任意多个通道上以任意顺序进行的一系列转换.
有16个多路通道。可以把转换组织成两组:规则组和注入组
规则通道:选择的,可以选择所有的16个通道都为规则通道,然后进行规则转换。
注入通道:选择的,可以选择4个通道为注入组。
单次转换 模式下,ADC只执行一次转换。可以软件触发也可以事件触发。转换完adc停止。该中断中断。注入通道只能被事件触发。规则通道既可以事件触发也可以软件触发。
连续转换模式  我理解为连续的对单一选定通道进行转换。即单次转换+不停止adc。 这还不是扫描模式。
扫描模式:用来扫描一组模拟通道
扫描模式 扫描所有被ADC_SQRX寄存器(对规则通道) 或 ADC_JSQR(对注入通道)选中的所有通道。 或 也就是说二选一。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
 
即 如果继续位(CONT)被选中,那么整个组是连续转换模式。  但组内还是扫描模式。 
 
如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。
而注入通道转换的数据总是存储在ADC_JDRx寄存器中。
 每次EOC是指单次转换,也就是组内的单个通道转换完成后。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

 
 
CAN接口心得
1,线上有问题,又开启了自动重发,当发送计数器达到128时,发送计数器就不加了,发送错误标志被置位。但当总线恢复的时候,can口就   死了--即发布出去也不能接收。不开启自动重发的话,总线恢复之后,收发是正常的
2,接上所述,当正常的时候,只发送还是不会使can口脱离被动错误状态,因为此时接收错误计数器被莫名其妙的被服了一个249。此时如果   再接收一个can帧的话,接收计数器马上变为小于127的数,此时can口脱离的被动错误状态
3,大容量的stm32的can接收和发送用的是和usb参合在一起的那两个函数,而错误故障等的中断在cos什么的中断函数里。
4,滤波器,不使能一个滤波值为0的滤波器的话,接收还真不能用!
5,心得:被动报错节点是 以为以前出的错都是自己引起的,所以再发现错误的时候,就不主动报错,如果别人证实了错误(别人的主动错误)那么自己会发一个被动错误标志,否则他会认为总线没有错。等到自己的错误累加到一定程度的时候,自己就掉线了。主动错误是发现错误后主动的告诉别人有错误了。该重发的重发,dnet的规定就dnet的规定。当处于离线的节点在一定的条件下会自动上线。当然这是can总线里定义的,器协议芯片可能不按照此作。

 
 
回复

使用道具 举报

16

主题

560

回帖

1

蝴蝶豆

金牌会员

最后登录
2020-6-25
发表于 2014-5-6 21:24:23 | 显示全部楼层

RE:【MCU实战经验】+STM32F407乘,除,开方时间实验

谢谢楼主分享
回复 支持 反对

使用道具 举报

2

主题

8

回帖

0

蝴蝶豆

高级会员

最后登录
2019-10-1
发表于 2017-12-16 14:50:58 | 显示全部楼层
本帖最后由 sjh2100 于 2017-12-16 18:26 编辑

感谢楼主分享。请教一个问题,cmsis里有q15格式的加法减法乘法,没有除法。如何进行除法?我打算用stm32f103进行q15格式数据计算。是直接用 “/” 进行除法,让编译器自己处理?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版