你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

(已解决)STM8L151的SPI1调不通啊

[复制链接]
技术范儿 提问时间:2016-12-20 18:44 /
本帖最后由 技术范儿 于 2016-12-21 15:51 编辑

RT,最近用STM8L151K4的SPI1外挂无线模块,感觉SPI不听使唤呢,下面是我的代码和抓到的波形图,请大家指点一下。
  1. #define SPI_PIN_SCK_PORT                            GPIOB
  2. #define SPI_PIN_SCK                                 GPIO_Pin_5

  3. #define SPI_PIN_MOSI_PORT                           GPIOB
  4. #define SPI_PIN_MOSI                                GPIO_Pin_6

  5. #define SPI_PIN_MISO_PORT                           GPIOB
  6. #define SPI_PIN_MISO                                GPIO_Pin_7

  7.                     

  8. #if 1
  9. void SpiInit( void )
  10. {
  11.      /* Enable SPI clock */
  12.     GPIO_Init(SPI_PIN_SCK_PORT,   SPI_PIN_SCK , GPIO_Mode_Out_PP_Low_Fast);
  13.     GPIO_Init(SPI_PIN_MOSI_PORT , SPI_PIN_MOSI , GPIO_Mode_Out_PP_Low_Fast);   
  14.     GPIO_Init(SPI_PIN_MISO_PORT , SPI_PIN_MISO , GPIO_Mode_In_PU_No_IT);
  15.     SPI_DeInit(SPI1);
  16.     CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
  17.     //SPI_DeInit(SPI1);
  18.     //GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast);
  19.     //GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);
  20.         //主机模式,配置为输入 该设置很关键
  21.     //GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT);
  22.     /* Initialize SPI */
  23.     SPI_Init(
  24.              SPI1,
  25.              SPI_FirstBit_MSB,
  26.              SPI_BaudRatePrescaler_16,
  27.              SPI_Mode_Master,
  28.              SPI_CPOL_Low,
  29.              SPI_CPHA_1Edge,  
  30.              SPI_Direction_2Lines_FullDuplex,
  31.              SPI_NSS_Soft,
  32.              0x07
  33.              );
  34.     SPI_Cmd(SPI1,ENABLE);
  35. }




  36. uint8_t SpiInOut( uint8_t outData )
  37. {

  38.   /* Loop while DR register in not emplty */
  39.           while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);
  40.         
  41.           /* Send byte through the SPI1 peripheral */
  42.           SPI_SendData(SPI1, outData);
  43.         
  44.           /* Wait to receive a byte */
  45.           while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);
  46.         
  47.           /* Return the byte read from the SPI bus */
  48.          return SPI_ReceiveData(SPI1);  
  49. }
  50. void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
  51. {
  52.     uint8_t i;
  53.    
  54.     GPIO_WriteBit( NSS_IOPORT, NSS_PIN, RESET );
  55.    
  56.     //temp = SpiInOut( addr | 0x80 );
  57.     SpiInOut( addr  );
  58.     //SpiInOut(0);
  59.     for( i = 0; i < size; i++ )
  60.     {
  61.         SpiInOut(buffer[i]);
  62.         //SpiInOut(0);
  63.     }
  64.    
  65.     GPIO_WriteBit( NSS_IOPORT, NSS_PIN, SET );
  66.    
  67.     //SPI_Cmd(SPI1,DISABLE);
  68. }
  69. 最后调用SX1276Write(0xff,0x02);发现裸机分析仪抓到的和写入的值不一致,而且相差很多。用的是内部16M时钟
复制代码


错误图片

错误图片
收藏 2 评论8 发布时间:2016-12-20 18:44

举报

8个回答
斜阳 回答时间:2016-12-21 09:16:31
帮顶            
风子 回答时间:2016-12-21 09:57:40
    GPIO_Init(SPI_PIN_SCK_PORT,   SPI_PIN_SCK , GPIO_Mode_Out_PP_Low_Fast);
    GPIO_Init(SPI_PIN_MOSI_PORT , SPI_PIN_MOSI , GPIO_Mode_Out_PP_Low_Fast);   
    GPIO_Init(SPI_PIN_MISO_PORT , SPI_PIN_MISO , GPIO_Mode_In_PU_No_IT);
去掉这几行,不需要

评分

参与人数 1ST金币 +4 收起 理由
zero99 + 4

查看全部评分

sssdd 回答时间:2016-12-21 13:26:36
SX1276Write函数声明在哪?
偶们只看到了
SX1276WriteBuffer

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

技术范儿 回答时间:2016-12-21 15:50:43
谢谢各位支持。跟硬件没关系,堆栈溢出到RAM区域,导致函数传参数的时候传错了

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

酱油先生 回答时间:2017-10-10 15:32:19
朋友能发一份硬件SPI的例程给我吗 luoyi654@163.com
lmy11224433 回答时间:2018-3-2 15:33:25
技术范儿 发表于 2016-12-21 15:50
谢谢各位支持。跟硬件没关系,堆栈溢出到RAM区域,导致函数传参数的时候传错了 ...

SPI使能之后,读写数据就有SCK时钟了?
xiatangtang 回答时间:2018-8-22 10:38:21
请教一下,读数据怎么做呢?发完读指令直接读吗?
daidingdong 回答时间:2019-5-11 10:28:47
楼主,能否请教一下关于这方面的问题,可以发一份这个历程吗,微信dddcmr,邮箱2454600872@qq.com,我做那个是stml151u6与a7139,请教下,十分感谢
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版