本帖最后由 素怀 于 2018-4-19 18:13 编辑
我的程序原来在SPI1上面时成功的,但是改到SPI3就不行了,问了正点原子的店铺的技术人员,他们说429是不需要禁用JTAG的。调了一整天就是没有通过。我用的引脚:CS-PA15,SCK-PB3,MOSI-PB5,MISO-PB4。如果不是禁用的问题的话,那就是我SPI3的配置是有问题的,但是我核对了很多遍,感觉没有错啊,请各位帮忙看一下吧。
[mw_shl_code=c,true]SPI_HandleTypeDef SPI3_Handler; //SPI 句柄
GPIO_InitTypeDef GPIO_Initure;
/*********SPI初始化SPI3************/
void LD3320_SPI_Cfg(void)
{
LD3320_CS=1;//CS初始化时置高,使用选择时置低
SPI3_Init();
SPI3_SetSpeed(SPI_BAUDRATEPRESCALER_2);//设置为45M时钟,高速模式
printf("SPI初始化完成
");
}
/*============SPI3层驱动,时钟使能,引脚配置=================*/
void SPI3_Init(void)
{
// __HAL_RCC_SPI3_CLK_ENABLE(); //使能 SPI3 时钟
__HAL_SPI_DISABLE(&SPI3_Handler);
SPI3_Handler.Instance=SPI3; //SP1
SPI3_Handler.Init.Mode=SPI_MODE_MASTER; //设置 SPI 工作模式,设置为主模式
SPI3_Handler.Init.Direction=SPI_DIRECTION_2LINES; // SPI 设置为双线模式
SPI3_Handler.Init.DataSize=SPI_DATASIZE_8BIT; // PI 发送接收 8 位帧结构
SPI3_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //注:官方源码为高,但官方注释上为低。同步时钟空闲状态为低电平
SPI3_Handler.Init.CLKPhase=SPI_PHASE_1EDGE;//时钟相位 数据采样从第一个时钟边沿开始
SPI3_Handler.Init.NSS=SPI_NSS_SOFT; //软件产生NSS
SPI3_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为SYSCLK/128
SPI3_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; //指定数据传输从 MSB 位开始,数据高位在前
SPI3_Handler.Init.TIMode=SPI_TIMODE_DISABLE; //关闭 TI 模式
SPI3_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//使能硬件 CRC
SPI3_Handler.Init.CRCPolynomial=7; //CRC 值计算的多项式,CRC多项式寄存器初始值为7
HAL_SPI_Init(&SPI3_Handler);//初始化
__HAL_SPI_ENABLE(&SPI3_Handler); //使能 SPI1
// spi_send_byte(0Xff); //启动传输
printf("SPI3_Init
");
}
/*============SPI3底层驱动,时钟使能,引脚配置=================*/
//此函数会被 HAL_SPI_Init()调用
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
if(hspi->Instance==SPI3)
{
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能IO口时钟
__HAL_RCC_SPI3_CLK_ENABLE(); //使能 SPI3 时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_4; //CS
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //50MHz
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;//SCK
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Speed=GPIO_SPEED_HIGH;
GPIO_Initure.Pull=GPIO_PULLUP;//上拉
GPIO_Initure.Alternate=GPIO_
AF6_SPI3; //复用为 SPI1
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}[/mw_shl_code]
我一开始是这么写的,就是有问题,我也觉得这样写是对的
一周热门 更多>