ch32v203c8t6 spi 问题

使用的是 EVT里面SPI 1Lines_half-duplex 的例子,从机。

我只是把SPI1的引脚PA5 PA6 重新配置到 PB3 PB4。不能正常接收数据。

这是代码,请帮忙分析一下。


//RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE );

RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE );



GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE);


#if (SPI_MODE == HOST_MODE)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOA, &GPIO_InitStructure );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOA, &GPIO_InitStructure );


#elif (SPI_MODE == SLAVE_MODE)

/*

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init( GPIOA, &GPIO_InitStructure );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init( GPIOA, &GPIO_InitStructure );

*/


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init( GPIOB, &GPIO_InitStructure );


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_Init( GPIOB, &GPIO_InitStructure );


#endif


应该收到 这一串数据 

u16 TxData[Size] = { 0x0101, 0x0202, 0x0303, 0x0404, 0x0505, 0x0606,

                     0x1111, 0x1212, 0x1313, 0x1414, 0x1515, 0x1616,

                     0x2121, 0x2222, 0x2323, 0x2424, 0x2525, 0x2626 };


实际收到 

SystemClk:72000000

SLAVE Mode

Rxdata:0180

Rxdata:6030

Rxdata:0c03

Rxdata:80e0

Rxdata:6018

Rxdata:0660

Rxdata:6607

Rxdata:01c1

Rxdata:8618

Rxdata:618c

Rxdata:18c1

Rxdata:8e18

Rxdata:e198

Rxdata:1981

Rxdata:9986

Rxdata:6619

Rxdata:c19c

Rxdata:3063


把代码改回去,引脚接到PA5 PA6就能正常接收。





您好,附件为测试例程,我这边测试没问题,你可以参考一下

icon_rar.gifCH32V203 SPI_PB3、PB4.zip

image.png


只有登录才能回复,可以选择微信账号登录