void SPI3_Init(void)。
{
GPIO_InitTypeDef GPIO_InitStructure;。
SPI_InitTypeDef SPI_InitStructure;。
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);。
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;。
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;。
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;。
GPIO_Init(GPIOB, &GPIO_InitStructure);。
GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI3); 。
GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI3); 。
GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI3); 。
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);。
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE);。
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 。
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 。
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; 。
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; 。
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; 。
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 。
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; 。
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; 。
SPI_InitStructure.SPI_CRCPolynomial = 7; 。
SPI_Init(SPI3, &SPI_InitStructure); 。
SPI_Cmd(SPI3, ENABLE); 。
}
代码是从原子哥的SPI列程改过来了,使用SPI1的时候OK,改为SPI3就怎么都不行了。
1, VBUS线是HOST/HUB向USB设备供电的电源线, 即平常USB设备的+5V. 一般是接到ATX电源的 5VSB或者是5VCC.。
2, USB接口有以下引脚:
VBUS :USB电压(5V)
DM, DP:USB两根差分信号,也叫D-,D+ 。
GND :电源地,0电平。
SHLD:固定USB座子的两个或四个定位孔。
3, USB设备供电分为自供电和总线供电两种设备类型,设备通过枚举过程的设备描述符声明自己的电源要求。
自供电设备不使用 HSOT/HUB的电源,而是自身有电源供应;
总线供电即指设备电源来自VBUS。
如果是总线供电设备,USB规范按照设备工作时吸取的电流大小又规定了两种设备:
low pwer和high power设备,low power设备任何情况下不得吸取超过100mA的电流,
high power设备在正确配置之前不得吸取超过100mA的电流,
如果已经配置,任何情况下不得吸取超过500mA的电流。
如果设备进入suspend状态,low power设备任何情况下不得吸取超过500uA电流,high power设备在已经正确配置并且远程唤醒功能被主机使能的情况下不得吸取超过2.5mA的电流,否则不得超过500uA(2008年USB-IF对 suspend电流规定进行了变更,原来的500uA电流的规定过于严格,因此所有USB设备suspend电流放宽到2.5mA。)
既然传入的是uint32 且最多只有256个累加。
建议 声明一个 long 的变量来累加,最后再转double 。
long sum=0; double avg=0;。
int i=n;
while(i--) sum+=pa[n];。
avg = sum;
return (avg/n)
如果还是有问题那就就去检查一下 FPU的寄存器配置,。
如果不用数学库的话直接在 初始化 代码里加入。
SCB->CPACR|=((3<<20)|(3<<11*2)); //CP10&CP11 full acess。
用不着去管 啥FPU USED之类的宏开关。
F103内核是M3,F405内核是M4,前者的主频最大是72M,后者最大168M,后者在很多性能方面都超越了前者,但两者的程序代码差不多。
与stm32f407相比,最大的区别是stm32f405中RG不支持FSMC接口,stm32f405全系列不支持网络,不支持摄像头。这是最主要的区别,其余就是由于大小导致的容量和IO的区别。