GD32F20x中SPI1库函数IO映射问题
请教:在用SPI1映射到PI0/PI1/PI2/PI3遇到了问题:根据手册, 只要将AFIO_PCF5中的和设置为即可:根据我的理解:
GPIO_PCF5_SPI1_IO_REMAP0 应该是中的第11位
GPIO_PCF5_SPI1_IO_REMAP1 应该是中的第12位
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_IO_REMAP0,DISABLE);
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_IO_REMAP1,ENABLE);
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_NSCK_REMAP0,DISABLE);
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_NSCK_REMAP1,ENABLE);
可是总会设置成???
然后进gd32f20x_gpio.c查看:
if(DISABLE != newvalue){
/* AFIO port configuration register selection */
......
}else if(GPIO_PCF5 == remap_reg){
reg = AFIO_PCF5;
reg |= remap;
AFIO_PCF5 = reg;
}
}else{
......
}else if(GPIO_PCF5 == remap_reg){
reg = AFIO_PCF5;
reg &= ~remap;
AFIO_PCF5 = reg;
}
}
没有发现问题。
再查看gd32f20x_gpio.h:
#define GPIO_PCF5_SPI1_NSCK_REMAP0 ((uint32_t)0x00000400U) /*!< SPI1 NSS/SCK remapping 0 */
#define GPIO_PCF5_SPI1_NSCK_REMAP1 ((uint32_t)0x00000600U) /*!< SPI1 NSS/SCK remapping 1 */
#define GPIO_PCF5_SPI1_IO_REMAP0 ((uint32_t)0x00000800U) /*!< SPI1 MISO/MOSI remapping 0 */
#define GPIO_PCF5_SPI1_IO_REMAP1 ((uint32_t)0x00001800U) /*!< SPI1 MISO/MOSI remapping 1 */
找到了问题:
0x00000800U =>0000 0000 0000 0000 0000 1000 0000 0000
0x00001800U =>0000 0000 0000 0000 0001 1000 0000 0000
后面这个数在二进制中出现两个1,也就是说
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_IO_REMAP1,ENABLE);
会改变两位的值。
我的解决办法,将设置顺序调换一下即可:
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_IO_REMAP1,ENABLE);
gpio_pin_remap1_config(GPIO_PCF5,GPIO_PCF5_SPI1_IO_REMAP0,DISABLE);
......
这个库还在学习过程中,搞得不太懂。
如果是我理解有错,请帮忙指正。
如果是库本身有误,请厂家帮忙改进。
谢谢!{:smile:}
楼主,请问GPIO_PCF5这个参数是根据GPIO_PCF5_SPI1_IO_REMAP1这个参数确定的吗,假如我要复用成GPIO_PCF5_UART3_REMAP,那我前面那个参数是不死要设置为GPIO_PCF5,但是我看官方数据手册这个参数是设置为GPIO_PCF2,这一块我不太理解。
页:
[1]