打印

GD32F20x中SPI1库函数IO映射问题

[复制链接]
562|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccx2xz|  楼主 | 2021-4-18 21:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
请教:在用SPI1映射到PI0/PI1/PI2/PI3遇到了问题:

根据手册, 只要将AFIO_PCF5中的[12:11]和[10:9]设置为[10]即可
根据我的理解:
GPIO_PCF5_SPI1_IO_REMAP0 应该是[12:11]中的第11位
GPIO_PCF5_SPI1_IO_REMAP1 应该是[12:11]中的第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);


可是总会设置成[11]???


然后进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);
......



这个库还在学习过程中,搞得不太懂。
如果是我理解有错,请帮忙指正。
如果是库本身有误,请厂家帮忙改进。


谢谢!









使用特权

评论回复
沙发
X1aoBa| | 2021-4-22 11:26 | 只看该作者
楼主,请问GPIO_PCF5这个参数是根据GPIO_PCF5_SPI1_IO_REMAP1这个参数确定的吗,假如我要复用成GPIO_PCF5_UART3_REMAP,那我前面那个参数是不死要设置为GPIO_PCF5,但是我看官方数据手册这个参数是设置为GPIO_PCF2,这一块我不太理解。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝