打印

GD32F190的 SPI主模式无法输出NSS信号

[复制链接]
4516|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wingis|  楼主 | 2018-4-26 23:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        spi_parameter_struct spi_init_struct;

        gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_15);
        gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
        gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);



   
    /* SPI0 parameter config */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    spi_init_struct.device_mode          = SPI_MASTER;
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
    spi_init_struct.nss                  = SPI_NSS_SOFT;
    spi_init_struct.prescale             = SPI_PSC_8;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI0, &spi_init_struct);

数据发送和接收都是正常的,但是就是没有NSS信号发出,电路上肯定没问题的,因为原来是STM32F0的板子,只是换了GD32F190上去,我使用PA15做NSS输出,也有配置PA15到AF0,  外部有上拉10K电阻,但是芯片工作后NSS始终被拉低,郁闷,有大神支招不?
沙发
zzyybb22| | 2018-4-27 10:32 | 只看该作者
配置参数 SPI_NSS_SOFT 指定通过软件发出NSS,需要修改

使用特权

评论回复
板凳
wingis|  楼主 | 2018-4-27 10:51 | 只看该作者
zzyybb22 发表于 2018-4-27 10:32
配置参数 SPI_NSS_SOFT 指定通过软件发出NSS,需要修改
        gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_15);
        gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
        gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

        SPI_CTL0(SPI0)&= ~SPI_CTL0_SPIEN;         //----Disable SPI
       
        SPI_CTL0(SPI0)=(uint32_t)(
                (0 << 15) |        //--  0=两线单向--  1=单线双向  
                (0 << 14) |        //--  0=单线双向只接收--1=单线双向只发送  
                (0 << 13) |        //--  0=CRC计算禁止  --1=CRC计算使能  
                (0 << 12) |        //--  0=下一发送值来自发送寄存器--  1=下一发送值来自CRC寄存器  
                (1 << 11) |        //--  0=8位帧长度--  1=16位帧长度  
                (0 << 10) |        //--  0=两线单向全双工--  1=两线单向只接收不发送  
                (0 <<  9) |        //--SSM  0=NSS脚从硬件管理  --1=起用SSI从软件管理  
                (1 <<  8) |        //--SSI  当SSM位为1时,此位值决定了NSS引脚电平
                (0 <<  7) |        //--  0=先发送MSB  --1=先发送LSB
                (0 <<  6) |        //--  0=禁止SPI设备  --1=开启SPI设备
                (4 <<  3) |        //--  (0-7)波特率控制,为PCLK的分频倍数(2,4,8,16,32,64,128,256)
                (1 <<  2) |        //--  0=配置为从设备  --1=主设备
                (0 <<  1) |        //--  时钟极性  
                (0 <<  0));        //--  时钟相位

        SPI_CTL1(SPI0)=(uint32_t)(
                (0 <<  7) |        //--  0=TBE中断屏蔽--  1=TBE中断不屏蔽  
                (0 <<  6) |        //--  0=RBNE中断屏蔽--  1=RBNE中断不屏蔽  
                (0 <<  5) |        //--  0=错误中断屏蔽--  1=错误中断不屏蔽  
                (1 <<  2) |        //--  0=主模式下SS输出禁用--  1=起用
                (0 <<  1) |        //--  0=TX的DMA缓冲禁止  --1=启用   
                (0 <<  0));        //--  0=RX的DMA缓冲禁止--  1=启用
       
        //SPI_STAT(SPI0)                //----状态寄存器
        //SPI_DATA(SPI0)                //----数据寄存器       
        //SPI_CRCPOLY(SPI0)                //----CRC多项式
        //SPI_RCRC(SPI0)                //----接收CRC计算结果
        //SPI_TCRC(SPI0)                //----发射CRC计算结果
        SPI_I2SCTL(SPI0)=0;
        //SPI_I2SPSC(SPI0)
        //SPI_QCTL(SPI0)
       
        SPI_CTL0(SPI0)|=SPI_CTL0_SPIEN;                //----Enable SPI
        //NVIC_SetPriority(SPI0_IRQn,1);
        //NVIC_EnableIRQ(SPI0_IRQn);




重新改写了SPI0的初始化函数,效果一样(数据发送和接收正常,就是NSS信号一直被拉低),请帮忙检查和指正一下问题。谢谢!

使用特权

评论回复
地板
wingis|  楼主 | 2018-4-28 10:57 | 只看该作者
咋没人关注我的问题呢?

使用特权

评论回复
5
静听风易| | 2018-4-28 15:28 | 只看该作者
我也没法用硬件NSS,使用软件操作NSS就好了。

使用特权

评论回复
6
wingis|  楼主 | 2018-4-28 16:15 | 只看该作者
静听风易 发表于 2018-4-28 15:28
我也没法用硬件NSS,使用软件操作NSS就好了。

就是没搞懂是为什么,估计是哪里设置没对,GD32的手册说的太简单,反复看了几遍手册还是没明白哪里有问题。

使用特权

评论回复
7
wingis|  楼主 | 2018-4-28 16:18 | 只看该作者
这个是将STM32的项目迁移到GD的,原打算节前迁移完成,现在只有停下先了,郁闷。

使用特权

评论回复
8
wingis|  楼主 | 2018-4-28 16:31 | 只看该作者
刚刚测试了SPI1

B12---->NSS
B13---->SCK
B14---->MISO
B15---->MOSI

还是一样的现象,数据收发正常,但就是没有硬件NSS信号发出。

使用特权

评论回复
9
vivilzb1985| | 2018-4-28 22:51 | 只看该作者
该管脚自身的内部下拉电阻的是怎样设置的?

使用特权

评论回复
10
vivilzb1985| | 2018-4-28 22:51 | 只看该作者
还有该管教室外部是不有下拉电阻设计的?

使用特权

评论回复
11
wingis|  楼主 | 2018-4-29 10:50 | 只看该作者
vivilzb1985 发表于 2018-4-28 22:51
还有该管教室外部是不有下拉电阻设计的?

内部设置推挽输出,外部悬空测量的。

使用特权

评论回复
12
wingis|  楼主 | 2018-5-3 18:41 | 只看该作者
都没人关注!

使用特权

评论回复
13
smilingangel| | 2018-5-8 20:34 | 只看该作者
这个NSS信号的不要的也可以的吧

使用特权

评论回复
14
comeon201208| | 2018-5-8 22:18 | 只看该作者
先看下该管脚的是否又被其他模块调用的

使用特权

评论回复
15
CharryW| | 2018-5-9 09:55 | 只看该作者
/*!
    \brief      SPI NSS output enable
    \param[in]  spi_periph: SPIx(x=0,1,2)
    \param[out] none
    \retval     none
*/
void spi_nss_output_enable(uint32_t spi_periph)
{
    SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSDRV;
}
NSS输出使能。

此外 :
主机硬件NSS 模式:为NSS 输出,NSSDRV=1 时,为单主机模
式,NSSDRV=0 时,为多主机模式。
从机硬件NSS 模式:为NSS 输入,作为从机的片选信号。

使用特权

评论回复
16
firstblood| | 2018-5-12 19:07 | 只看该作者
SPI总线的设计还是非常不错的

使用特权

评论回复
17
chuntian2016| | 2018-5-15 19:53 | 只看该作者
关于SPI总线的设计还是比较难的

使用特权

评论回复
18
wingis|  楼主 | 2018-5-17 23:32 | 只看该作者
反正我还是没搞定,现在还是只能手控NSS。当然我也没去搞了。

使用特权

评论回复
19
yywyai| | 2018-6-20 13:01 | 只看该作者
NSS输出使能后,当SPI使能时,如果NSS引脚配置为输出模式,NSS引脚在主模式时被拉低。也就是NSS脚在SPI使能后一直是低电平

使用特权

评论回复
评论
wingis 2019-2-24 23:08 回复TA
你的意思是每次传输时 使能SPI,传输结束了就 禁能SPI ?? 
20
xixihahaa| | 2024-7-21 22:40 | 只看该作者
确实垃圾 GD32E230也一样 NSS脚一直为低

使用特权

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

本版积分规则

17

主题

132

帖子

1

粉丝