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

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

[复制链接]
tangleon-270588 提问时间:2014-4-1 20:13 /
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总线里定义的,器协议芯片可能不按照此作。

 
 
收藏 3 评论2 发布时间:2014-4-1 20:13

举报

2个回答
feel-376797 回答时间:2014-5-6 21:24:23

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

谢谢楼主分享
sjh2100 回答时间:2017-12-16 14:50:58
本帖最后由 sjh2100 于 2017-12-16 18:26 编辑

感谢楼主分享。请教一个问题,cmsis里有q15格式的加法减法乘法,没有除法。如何进行除法?我打算用stm32f103进行q15格式数据计算。是直接用 “/” 进行除法,让编译器自己处理?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版