? ? ?最近使用CH32V307RCT6單片機(jī)驅(qū)動MFRC522模塊時出現(xiàn)SPI2初始化失敗的情況。具體現(xiàn)象是 在MounRiverStudio中按F8快捷鍵下載程序,SPI2初始化正常。單片機(jī)斷電后重新上電,SPI2初始化失敗,再次初始化仍舊失敗,調(diào)用NVIC_SystemReset();函數(shù)軟重啟后,SPI2初始化恢復(fù)正常。
代碼如下:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();
Delay_Init();
MFRC522_Init();
wchUart3Init(1000000,true,false);//printf調(diào)試串口 波特率1M
? ? printf("SystemClk:%d\r\n",SystemCoreClock);
? ? printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
? ? printf("This is printf example\r\n");
u32 counter = 0;
? ? while(1)
? ? {
? ? ? ? Delay_Ms(500);
? ? ? ? printf("[M]This is App =%06d!\r\n",counter++);
? ? ? ? Delay_Ms(10);
? ? ? ? if(ReadRawRC (ModeReg) != 0x3D) //測試SPI2初始化是否成功,等于0x3D則為成功
? ? ? ? {
? ? ? ? ? ? printf("[M]MFRC522_Init()=%02X\r\n",ReadRawRC (ModeReg));
? ? ? ? }
? ? }
}
void MFRC522_Init(void)//接口初始化
{
? ? GPIO_InitTypeDef GPIO_InitStructure = {0};? ??
? ? SPI2_Init(SPI_CPOL_Low,SPI_CPHA_1Edge,SPI_BaudRatePrescaler_16);
? ? SPI_I2S_DeInit(SPI2);
? ? SPI2_Init(SPI_CPOL_Low,SPI_CPHA_1Edge,SPI_BaudRatePrescaler_16);
? ? wchGpioClockEnable(MFRC522_NCS_GPIO_PORT);
? ? GPIO_InitStructure.GPIO_Pin = MFRC522_NCS_GPIO_PIN;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init(MFRC522_NCS_GPIO_PORT, &GPIO_InitStructure);
? ? wchGpioClockEnable(MFRC522_RST_GPIO_PORT);
? ? GPIO_InitStructure.GPIO_Pin = MFRC522_RST_GPIO_PIN;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init(MFRC522_RST_GPIO_PORT, &GPIO_InitStructure);
? ? PcdReset();
? ? M500PcdConfigISOType ( 'A' );//設(shè)置工作方式
}
經(jīng)過各種測試,發(fā)現(xiàn)加入紅色加粗部分代碼后可以解決此問題。至于出現(xiàn)這種現(xiàn)象的原因沒有頭緒,敬求解!