调试SPI2时注意:画红圈需一致 SPI1时钟由APB2时钟分频而来,而SPI2/3时钟由APB1时钟分频而来
调试SPI3时需注意与JTAG引脚共用问题:
由于SPI3的PA15引脚和JTAG引脚共用,调试过程中发现SPI不能读写数据
经过查询资料发现使用SPI3需要先关闭JTAG功能(默认上电使能JTAG),如下:
1.将PA15配置为普通IO口( GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; )
2.开启AFIO时钟 ( RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);)
3.关闭JTAG( GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE) ;)
如下:
void bsp_Init_SPI3_A(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SCLK_0_A();
CS1_1_A();
RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB1Periph_SPI3, ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE) ;
}