查看: 4185|回复: 7

[经验] 兆易创新GD32 Colibri-F207ZE评估板体验纪实 (五、曙光) 

[复制链接]
  • TA的每日心情
    无聊
    2018-1-4 09:36
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-1-24 11:39:50 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 okwh 于 2016-2-18 12:22 编辑

    兆易创新GD32Colibri-F207ZE评估板体验纪实 (五、曙光)
                                                                            25_okwh@https://www.cirmall.com/gd32f2mcu
                                                                                 2015.12.24


    调试SPI的诡异现象
    1)SPI 1 CLK/MISO/MOSI对应PA-5/6/7, 似乎三线的GPIO_Mode全部设为GPIO_MODE_AF_PP, 或把MISO设为GPIO_MODE_IN_FLOATING均可工作。搜索网上资料似乎两种代码都有,GD32-Colibri-F207ZE-DEMO\Colibri_GD32F207\firmware\GD32F20x_Firmware_Library\Example\SPI的代码使用后一种(说明书表5-5似乎也是这一种),本人对管脚配置理解不足,无从评价。(还需要学习推挽、浮空、上拉、下拉、开漏、普通IO都是什么呀,非科班的悲哀呀)

    004.png
                                  
    2)众所周知,SPI的读写基本代码为:
    while((SPIx->STR&I2S_FLAG_TBE)==RESET);      //等待可发送
       SPIx->DTR=Byte;                          //发送一字节  
       while((SPIx->STR&I2S_FLAG_RBNE)==RESET);   //等待接收完成  
       returnSPIx->DTR;                           //读接收结果      
    结果在单步调试时,在同时显示sysytem viewwindow—SPI窗口时,可看到STR寄存器RBNE位为1, 代码读STR却为2(如下图RBNE是STR的0位, TBE是1位,有接收时STR应该是3),这怎么可能,百思不解啊!!!!

    002.png 002.png

    后来关闭sysytem viewwindow—SPI窗口,即可正常读出STR为3 !!!(下图)

    003.png 003.png

    My GOD !!!! 请教,这是Keil uVision的问题吗????

    3)     以前发现的时有时无诡异现象有:调试状态时,call-stack窗口中局部变量得不到值、鼠标停留在某变量得不到变量值、watch窗口中的变量得不到值,唉,调试呀,这叫什么事呢………

    没办法,俺没足够的经验,这还是首次用uVision真正地做。

    4)在用SPI做我计划的ADDA控制之前,先来熟悉验证一下下小红板的SPI操作
    修改使用例子中的GD32-Colibri-F207ZE-DEMO\Colibri_GD32F207\firmware\GD32F20x_Firmware_Library\Example\SPI\SPI_FullDuplex_CRC,进行SPI和SPI3的通讯。这例子来自GDM3209xx-EVAL板,并没有针对小红板做修正。
       分析手册、原理图、小红板,确定SPI1对应SCK/MISO/MOSI是PA5/6/7,SPI3对应是PB3/4/5,如图:
    spi13.png

        原代码是以SPI1为主,SPI3为从,二者连接进行全双工通讯。很遗憾,这样配置,我的测试结果是可以发送而接收失败,似乎是SPI3为从时,发送线一直为高不变,不送回数据,原因不明。
        我的试验验证结果: (1) 两个分别单独为主时,均可正常发送。(2) 以SPI3为主,SPI1为从,可以正常发送接收。 (3) SPI1为主,SPI3为从,通讯失败,表现为SPI3从的发送线一直为高不变,不送数。  检查手段:示波器。

    成功代码如下:
    1. (注意接线: SPI3主,SPI1从,CLK-CLK,MOSI-MOSI,MISO-MISO   !!!!)
    2. /* Private variables -----------------------*/
    3. uint8_t SPI1_Buffer_Tx[ BufferSize ] = {0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA };
    4. uint8_t SPI3_Buffer_Tx[ BufferSize ] = {0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A };
    5. uint8_t SPI1_Buffer_Rx[ BufferSize ], SPI3_Buffer_Rx[ BufferSize ];
    6. uint32_t TxIdx = 0, RxIdx = 0;
    7. …………………………………………

    8. /* Enable Peripheral clock */  配置IO
    9.     RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOA | RCC_APB2PERIPH_GPIOB | RCC_APB2PERIPH_GPIOC| RCC_APB2PERIPH_AF , ENABLE);
    10.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_SPI1,ENABLE);
    11.     RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_SPI3,ENABLE);
    12.    /* 从 Confugure SCK and MOSI pins as Input Floating */
    13.    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_5 | GPIO_PIN_7 ;
    14.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    15.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING; //从SCK MO 浮空输入
    16. /* 从 Confugure MISO pin as Alternate Function Push Pull */
    17.     GPIO_Init(GPIOA, &GPIO_InitStructure);
    18.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6;
    19.     GPIO_InitStructure.GPIO_Mode =   GPIO_MODE_AF_PP;   // 从 MI  备用推挽
    20.     GPIO_Init(GPIOA, &GPIO_InitStructure);
    21.   
    22.     /* Configure SPI3 pins: SCK, MISO and MOSI ----*/  
    23.         //GD32-Colibri-F207ZE 板 SPI3使用 PB 3/5/4
    24.     /* Confugure SCK and MOSI pins as Alternate Function Push Pull | GPIO_PIN_6*/
    25.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_3 | GPIO_PIN_5 ;//| GPIO_PIN_4;
    26.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    27.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP; // 主SCK MO 备用推挽
    28.     GPIO_Init(GPIOB, &GPIO_InitStructure);

    29.     /* Confugure MISO pin as Input Floating  */
    30.      GPIO_InitStructure.GPIO_Pin = GPIO_PIN_4;
    31.      GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING; //主MI  浮空输入   
    32.      GPIO_Init(GPIOB, &GPIO_InitStructure);
    33.                  
    34.                  
    35.    /* SPI1 configuration -----从-------*/   配置SPI
    36.     SPI_InitStructure.SPI_TransType = SPI_TRANSTYPE_FULLDUPLEX ;
    37.     SPI_InitStructure.SPI_Mode = SPI_MODE_SLAVE;   //SPI_MODE_MASTER;    //从
    38.     SPI_InitStructure.SPI_FrameFormat = SPI_FRAMEFORMAT_8BIT ;
    39.     SPI_InitStructure.SPI_SCKPL = SPI_SCKPL_LOW;
    40.     SPI_InitStructure.SPI_SCKPH = SPI_SCKPH_2EDGE;
    41.     SPI_InitStructure.SPI_SWNSSEN = SPI_SWNSS_SOFT; ///NSS不用
    42.     SPI_InitStructure.SPI_PSC = SPI_PSC_64;     //分频
    43.     SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;
    44.     SPI_InitStructure.SPI_CRCPOL = 7;         //CRC
    45.     SPI_Init(SPI1, &SPI_InitStructure);

    46.     /*  SPI3 configuration ----------主-------*/
    47.    SPI_InitStructure.SPI_PSC = SPI_PSC_32;     //分频
    48.    SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;//PI_MODE_SLAVE;     
    49.    SPI_Init(SPI3, &SPI_InitStructure);

    50.     /* DisEnable SPI AND SPI3 CRC calculation */
    51.   //  SPI_CRC_Enable(SPI1, ENABLE);
    52. //  SPI_CRC_Enable(SPI3, ENABLE);
    53.     SPI_CRC_Enable(SPI1, DISABLE);
    54.     SPI_CRC_Enable(SPI3, DISABLE);

    55.     /* Enable SPI1 AND SPI3 */
    56.     SPI_Enable(SPI1, ENABLE);
    57.     SPI_Enable(SPI3, ENABLE);
    58.    
    59.     /* 开始全双工循环通讯 以便示波器测定  Transfer procedure */
    60.     while (1) //TxIdx < BufferSize - 1)
    61.     {
    62.        while (SPI_I2S_GetBitState(SPI1, SPI_FLAG_TBE) == RESET){__NOP;}  
    63.    SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[ TxIdx ]);
    64.    SPI_I2S_SendData(SPI3, SPI3_Buffer_Tx[ TxIdx++ ] );   
    65.        while (SPI_I2S_GetBitState(SPI1, SPI_FLAG_RBNE) == RESET);   
    66.    SPI1_Buffer_Rx[ RxIdx ] = SPI_I2S_ReceiveData( SPI1 );
    67.       while (SPI_I2S_GetBitState(SPI3, SPI_FLAG_RBNE) == RESET){__NOP;}   
    68.    SPI3_Buffer_Rx[ RxIdx++ ] = SPI_I2S_ReceiveData( SPI3 );           
    69.       if (TxIdx == BufferSize)  
    70.       {    TxIdx=0;      RxIdx=0;    }
    71.     }
    复制代码
    结果如下简易示波器截图:图中绿色为CLK信号。
    SPI1 发送的0xA8  0xA9  0xAA

    spi1.png
    SPI3 发送的0x52  0x53  0x54

    spi3.png

    OK, 下次就可以正式做ADDA了。真不容易啊!

    本系列:
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (一、邂逅)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (二、初识)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (三、定计)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (四、筑基)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (五、曙光)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (六、揭秘)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实   (七、回眸)

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2018-1-4 09:36
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

     楼主| 发表于 2016-1-24 11:54:38 | 显示全部楼层
    插图位置怎么总调不好呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-1-4 09:36
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

     楼主| 发表于 2016-1-25 00:13:07 | 显示全部楼层
    更新,完成SPI检查准备。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-25 09:14:40 | 显示全部楼层
    非常棒!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-25 10:07:19 | 显示全部楼层
    亲,可以将内容一并发到经验频道,这是一个很好的系列,很有机会获得每月之星的呢http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-1-4 09:36
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

     楼主| 发表于 2016-1-25 18:12:48 | 显示全部楼层
    糖悦之果飞 发表于 2016-1-25 10:07
    亲,可以将内容一并发到经验频道,这是一个很好的系列,很有机会获得每月之星的呢http://jingyan.eeboard.c ...

    版主, 怎么一并发呢?
    需要复制到经验频道再发吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-26 08:31:03 | 显示全部楼层
    okwh 发表于 2016-1-25 18:12
    版主, 怎么一并发呢?
    需要复制到经验频道再发吗?

    是的呢,直接将内容复制到经验频道即可
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-1-4 09:36
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

     楼主| 发表于 2016-2-18 12:51:38 | 显示全部楼层
    春节回老家了,今天18号,现在整理完毕,共7贴。
    谢谢各位,祝各位新的一年顺风顺水,心想事成!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 14:04 , Processed in 0.180012 second(s), 30 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.