|

楼主 |
发表于 2024-5-24 12:48:06
|
显示全部楼层
本帖最后由 abbey_tom 于 2024-5-24 12:53 编辑
最简打板文件已经在121楼给出过了,
我使用这个板试验是没有问题的。
这个片子还是比较皮实的,
即使晶体振荡有问题也是可以工作的,
如果通讯不正常,
应该是SPI接口及设置的问题,
可以从读取芯片的ID开始进行验证。
检查一下上位机的SPI接口是否正常,
我的SPI接口初始化代码如下:
void SPI2_Init(void) //硬件SPI2口初始化用于连接NFR2401
{
Enable_DEVx_CLK((u32)GPIOB,1); //PORTB时钟使能
Enable_DEVx_CLK((u32)SPI2,1); //SPI2时钟使能
//SPI2口初始化,配置PB13和PB15为:push-pull - SCK,MOSI
My_GPIO_Init(GPIOB, GPIO_Pin_13, Mode_AF_PP+Speed_50MHz);
// My_GPIO_Init(GPIOB, GPIO_Pin_14, Mode_AF_PP+Speed_50MHz);
My_GPIO_Init(GPIOB, GPIO_Pin_14, Mode_IN_FLOATING+Speed_50MHz); //配置PB14为输入 - MISO
My_GPIO_Init(GPIOB, GPIO_Pin_15, Mode_AF_PP+Speed_50MHz); //Mode_IPU也行
PBout(13)=1 Bout(14)=1 Bout(15)=1;
My_GPIO_SetBits(GPIOB,GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); //PB13/14/15上拉
bSPI_CR_SPE(bSPI2)=0; //配置前,SPI设备先禁止
bSPI_CR_RXONLY(bSPI2)=0; //全双工模式 // SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI1设置为两线全双工
bSPI_CR_SSM(bSPI2)=1; //软件nss管理// SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
bSPI_CR_SSI(bSPI2)=1; //NSS信号由软件(使用SSI位)管理
bSPI_CR_MSTR(bSPI2)=1; //SPI主机// SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI2为主模式
bSPI_CR_DFF(bSPI2)=0; //8bit数据格式 // SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI发送接收8位帧结构
bSPI_CR_CPOL(bSPI2)=0; //SPI时钟空闲时为低电平// SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行时钟在不操作时,时钟为低电平
//SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
bSPI_CR_CPHA(bSPI2)=0; // SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; 数据采样从第1个时钟边沿开始
bSPI_CR_LSBFIRST(bSPI2)=0; // SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB位开始//MSBfirst
SET_SPI_CR_BR(bSPI2,SPI_SPEED_32); //分频设置:32分频// SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定义波特率预分频的值:波特率预分频值为8
// SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式
SPI2->CRCPR=7;
bSPI_CR_SPE(bSPI2)=1; //SPI设备使能
SPI_Write_Byte(0xff);
} |
|