CH32V307RCT6 SPI2初始化失敗問題

? ? ?最近使用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)象的原因沒有頭緒,敬求解!

您好,SPI在初始化的時候注意將相關(guān)結(jié)構(gòu)體清0,可參考下圖試一下。調(diào)用SPI_I2S_DeInit函數(shù)也是使其恢復(fù)默認(rèn)配置,正常初始化時候?qū)⑵浣Y(jié)構(gòu)體清零即可,避免將隨機(jī)值寫入寄存器導(dǎo)致初始化失敗。若修改后還有問題,可將完整程序發(fā)我郵箱(lzs@wch.cn)具體看一下。

image.png


用SPI2讀W25Q64遇到同樣問題,解決辦法同上

? ? printf("SPI_Flash_Init\r\n");

? ? SPI_Flash_Init();

? ? printf("Flash_ID:%04x\r\n", SPI_Flash_ReadID());


? ? SPI_I2S_DeInit(SPI2);? ? ?//二次初始化SPI2,否則不正常


? ? SPI_Flash_Init();

? ? printf("Flash_ID:%04x\r\n", SPI_Flash_ReadID());

運(yùn)行結(jié)果:

1736085300563672.jpg

1736085300105073.jpg

第二次讀取正確

1736085300715535.jpg

第一次讀取,CS還沒讀取完就先變高電平了,時鐘連續(xù)不分組


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频