请选择 进入手机版 | 继续访问电脑版
查看: 244|回复: 14

[已解决] (源码)STM32模拟SPI实现不同工作模式的问题

[复制链接]

该用户从未签到

3

主题

193

帖子

0

精华

金牌会员

最后登录
2018-8-20
发表于 2018-8-10 11:58:57 | 显示全部楼层 |阅读模式
本帖最后由 xiajintaord 于 2018-8-10 15:12 编辑

现在做的一个项目,由于成本原因,选用的芯片的SPI数量不够实现产品的功能,所以需要一个软件模拟的 SPI;
今天上午参考论坛里的帖子实现了 SPI 工作模式0 的代码,测试通过了(说明IO配置没有问题)。现在在调试工作模式1的代码,无法通讯,时序始终不对,代码帖出来,大家看看。
现在的问题就是工作模式1的时序怎么实现了。
补充一下:用的 keil 开发的寄存器版本,上传的代码格式有问题,上图片看吧。
  1. #include <stm32l1xx.h>

  2. #define SPI_SCLK_SET                {GPIOB->BSRRL=0x00000040;}        //PB6
  3. #define SPI_SCLK_CLR                {GPIOB->BSRRH=0x00000040;}      
  4. #define SPI_MOSI_SET                {GPIOB->BSRRL=0x00000080;}        //PB7
  5. #define SPI_MOSI_CLR                {GPIOB->BSRRH=0x00000080;}
  6. #define SPI_MISO_DAT                (GPIOB->IDR&0x00000008)             //PB3  



  7. void SPI_Delay(uint16 n)
  8. {
  9.          n<<=4;
  10.          while(n--);
  11. }
复制代码

模拟SPI0.png 模拟SPI1.png
  2018年STM32线下培训时间表>>                    
回复

使用道具 举报

该用户从未签到

3

主题

193

帖子

0

精华

金牌会员

最后登录
2018-8-20
 楼主| 发表于 6 天前 | 显示全部楼层
结贴:
00 01工作模式的模拟 SPI 已经调试完成了,都在下面的附件里面;
大家基本上用的都是硬件的 SPI,但有时候受限于成本,硬件资源不足的情况下,像 IIC 一样软件模拟的 SPI 也是一个不错的选择啊。
仅仅是修改部分代码,主要是针对 SCLK 时序,要理解 SPI 在不同的工作模式下的数据收发时序;

simulate_spi.rar

895 Bytes, 下载次数: 1, 下载积分: ST金币 -1

售价: 5 ST金币  [记录]  [购买]

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

193

帖子

0

精华

金牌会员

最后登录
2018-8-20
 楼主| 发表于 2018-8-10 14:54:04 | 显示全部楼层
本帖最后由 xiajintaord 于 2018-8-10 15:15 编辑
toofree 发表于 2018-8-10 14:20
不知道你的IO读写是怎么来的。

请参考IO模拟I2C的代码,如下:

感谢回复。
说明一下,我这个是用的 L1 系列,BSRR 寄存器可以分别向 BSRRH、BSRRL 写1进行清零或者置位对应的 IO 口,另外,上面工作模式 0 的代码已经测试通过了,说明 IO 配置是 OK 的。
寄存器定义头文件.png
BSRR.png


现在的问题是,工作模式 1 的时序没模拟出来,正在用示波器调试,还需要改改程序逻辑
  2018年STM32线下培训时间表>>                    
回复 支持 1 反对 0

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    19

    主题

    1786

    帖子

    0

    精华

    论坛元老

    最后登录
    2018-8-20
    发表于 2018-8-10 14:20:08 | 显示全部楼层
    不知道你的IO读写是怎么来的。

    请参考IO模拟I2C的代码,如下:
    #define SCL_H         GPIOB->BSRR = GPIO_Pin_6
    #define SCL_L         GPIOB->BRR  = GPIO_Pin_6
       
    #define SDA_H         GPIOB->BSRR = GPIO_Pin_7
    #define SDA_L         GPIOB->BRR  = GPIO_Pin_7

    #define SCL_read      GPIOB->IDR  & GPIO_Pin_6
    #define SDA_read      GPIOB->IDR  & GPIO_Pin_7

    评分

    参与人数 1蝴蝶豆 +3 收起 理由
    zero99 + 3

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    564

    帖子

    0

    精华

    金牌会员

    最后登录
    2018-8-20
    发表于 2018-8-10 15:12:20 | 显示全部楼层
    toofree 发表于 2018-8-10 14:20
    不知道你的IO读写是怎么来的。

    请参考IO模拟I2C的代码,如下:

    这个代码是如何配置IIC的SDA端口方向的??
      2018年STM32线下培训时间表>>                    
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    193

    帖子

    0

    精华

    金牌会员

    最后登录
    2018-8-20
     楼主| 发表于 2018-8-10 15:14:37 | 显示全部楼层
    select326 发表于 2018-8-10 15:12
    这个代码是如何配置IIC的SDA端口方向的??

    像这种一般都会在程序初始化的时候配置输入输出模式的,这里指关心 IO 的输入输出寄存器的值
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    19

    主题

    1786

    帖子

    0

    精华

    论坛元老

    最后登录
    2018-8-20
    发表于 2018-8-10 15:16:17 | 显示全部楼层
    xiajintaord 发表于 2018-8-10 14:54
    感谢回复。
    说明一下,我这个是用的 L1 系列,BSRR 寄存器可以分别向 BSRRH、BSRRL 写1进行清零或者置位 ...

    不清楚你说的模式0是什么?官方没有这种叫法。
    只有master mode、Slave mode、TI mode、BIDIMODE=1、BIDIMODE=0

    既然模式0通过,那么模式1也应该能通过的。好好抠一下协议

    评分

    参与人数 1蝴蝶豆 +3 收起 理由
    zero99 + 3

    查看全部评分

      2018年STM32线下培训时间表>>                    
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    精华

    初级会员

    最后登录
    2018-8-13
    发表于 2018-8-10 15:35:12 | 显示全部楼层
    可以问一下啥编辑软件嘛这个配色很舒服
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    193

    帖子

    0

    精华

    金牌会员

    最后登录
    2018-8-20
     楼主| 发表于 2018-8-10 17:25:43 | 显示全部楼层
    dengdenghui 发表于 2018-8-10 15:35
    可以问一下啥编辑软件嘛这个配色很舒服

    http://www.sublimetext.com/
      2018年STM32线下培训时间表>>                    
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    193

    帖子

    0

    精华

    金牌会员

    最后登录
    2018-8-20
     楼主| 发表于 2018-8-10 17:34:29 | 显示全部楼层
    问题还未解决,在‘摸索中,’先记一下,解决了再来结贴总结吧。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    151

    帖子

    0

    精华

    高级会员

    最后登录
    2018-8-20
    发表于 2018-8-10 20:02:10 | 显示全部楼层
    你的设备没有CS这个引脚吗,SPI做一主多从还是很容易的

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

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

    小黑屋|手机版|Archiver|意法半导体STM32/STM8技术社区

    GMT+8, 2018-8-20 16:22 , Processed in 0.124349 second(s), 16 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表