在线时间2 小时
UID270588
ST金币0
蝴蝶豆0
注册时间2008-6-5
新手上路
- 最后登录
- 2020-11-20
|
a0a.1 0b0c
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总线里定义的,器协议芯片可能不按照此作。
|
|