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

SPI通信出现时钟紊乱  

[复制链接]
watercici 提问时间:2018-6-14 10:30 /
前几天我发了一篇帖子说的也是SPI通信的问题https://www.stmcu.org.cn/module/forum/thread-616184-1-1.html

,结贴的方式是SPI初始配置的问题。但是今天又出现了同样的问题,说明还有别的地方影响SPI通信。反正现在SPI通信时钟紊乱,不知道是什么问题,上传图片,大家帮忙看看。提供点思路。

图片1.jpg
图片2.jpg
图片3.jpg
收藏 2 评论39 发布时间:2018-6-14 10:30

举报

39个回答
watercici 回答时间:2018-6-21 09:44:59
toofree 发表于 2018-6-21 09:21
有没有使用操作系统?用的硬件SPI还是软件IO模拟SPI?如果是硬件SPI,那么用的什么型号的芯片?

从图片看 ...

我用的是软件NSS,不带系统,我昨天给错误的地方定位了一下,发现是在我AD采集的过程中会有一个PWM波输出端的切换,我没有切换只是进行了初始化,(因为原来的函数PWM的初始化和切换打开是在一个函数里面,现在我把初始化和PWM切换输出放在了两个函数里面)。现在我把初始化函数去掉改成打开切换PWM波的输出就没有事情了。但是我仍然不知道为什么?
还有您说的中断造成的是什么意思,能详细的说一下吗?
下面是我的PWM波的初始化和打开函数。

  1. void init_timer(void)
  2. {  
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  5.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  6.        
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA, ENABLE);       
  8.        
  9.         /* GPIOA Configuration:TIM9 Channel1 and 2 as alternate function push-pull */
  10.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11;
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//¸´Óù¦ÄÜÍÆÍìÊä³ö
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.        
  14.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.        
  16.         /* NVIC Configuration */          
  17.                  


  18.         TIM_DeInit(TIM1);
  19.        
  20.         /* Time base configuration */
  21. //        TIM_TimeBaseStructure.TIM_Period = 49;
  22.         TIM_TimeBaseStructure.TIM_Period = 50;
  23.         TIM_TimeBaseStructure.TIM_Prescaler = 5;
  24.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  25.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                       
  26.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  27.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  28.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  29.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  30.         TIM_OCInitStructure.TIM_Pulse = 25;       
  31.        
  32.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  33.         TIM_OC4Init(TIM1, &TIM_OCInitStructure);
  34. }
  35. //SENSOR_A10-PA11-TIM1_CH4  SENSOR_A11-PA8-TIM1_CH1
  36. void init_emit_electrode()
  37. {
  38.         if(pwm_output == PWM_OUTPUT_A10)
  39.         {
  40.                 pwm_output = PWM_OUTPUT_A11;               
  41.         //TIM_OC1Init(TIM1, &TIM_OCInitStructure);                 
  42.                 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);               
  43.         }
  44.         else
  45.         {
  46.                 pwm_output = PWM_OUTPUT_A10;
  47.                 //TIM_OC4Init(TIM1, &TIM_OCInitStructure);                 
  48.                 TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
  49.         }
  50.        
  51.         TIM_ARRPreloadConfig(TIM1, ENABLE);
  52.        
  53.         /* TIM enable counter */
  54.         TIM_Cmd(TIM1, ENABLE);
  55.         TIM_CtrlPWMOutputs(TIM1, ENABLE);                 
  56.         /* TIM IT enable */
  57.         ////TIM_ITConfig(TIM1, TIM_IT_CC1 | TIM_IT_CC2, ENABLE);       
  58. }
复制代码
watercici 回答时间:2018-6-20 13:57:10
本帖最后由 watercici 于 2018-6-20 14:00 编辑

统一回复,该问题没有解决!谢谢大家的意见,为了更好的解决问题,我在说的详细一些:
1:我的SPI是OLED和W25Q16共用一个SPI;
2:单独调试的时候SPI通信成功;但是放在程序里面会出问题;
3:目前初始化的时候会有OLED显示和FLASH是否是首次使用的判断,此时二者的时序是正常的
4:但是进入主循环,先进行AD采集,数据处理判断,然后OLED显示,将测试数据写入FLASH,此时二者的SPI时序开始异常,时钟紊乱。
我知道大家不好定位,但是我希望大家给我看看,出现这种情况可能是什么原因造成的,我好有思路,自己在程序中定位。
谢谢!

时钟紊乱

时钟紊乱
butterflyspring 回答时间:2018-6-14 10:39:44
把调用函数发一下?我不知道你之前的贴叫什么..
watercici 回答时间:2018-6-14 10:47:35
butterflyspring 发表于 2018-6-14 10:39
把调用函数发一下?我不知道你之前的贴叫什么..

调用函数您指的是哪些,是SPI的基本函数和初始化配置函数吗?
我的这个问题就是随机出现的,SPI通信有正常的时候。
就是不知道是什么其他的地方影响了SPI,一开始以为是中断,可是在发送数据前把中断关掉也不行。
zero99 回答时间:2018-6-14 10:48:08
butterflyspring 发表于 2018-6-14 10:39
把调用函数发一下?我不知道你之前的贴叫什么..

楼主,你说的是这个吗

SPI通信中奇怪的问题,在线等,谢谢!
https://www.stmcu.org.cn/module/forum/thread-616184-1-1.html
toofree 回答时间:2018-6-14 10:53:34
楼主,你想说明什么?
没有工程代码,怎么知道你什么问题,我从没出过这问题。
以前只在IO模拟SPI时出过问题,那时因为在两个IO操作之间没有加延时,STM32又是流水操作,导致了看似指令是顺序的,执行起来就不见得谁先谁后了。

评分

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

查看全部评分

watercici 回答时间:2018-6-14 10:57:32
zero99 发表于 2018-6-14 10:48
楼主,你说的是这个吗

SPI通信中奇怪的问题,在线等,谢谢!

是的。您遇到过吗?
watercici 回答时间:2018-6-14 11:00:46
toofree 发表于 2018-6-14 10:53
楼主,你想说明什么?
没有工程代码,怎么知道你什么问题,我从没出过这问题。
以前只在IO模拟SPI时出过问 ...

主要是整个工程代码是公司的不方便贴,局部SPI的代码,我查看了好几遍,我觉得从基本配置到读写传输都没有问题,而且他有通信成功的时候。。所以我就是想知道,出现时钟紊乱,可能是哪些机制造成的,我认为应该不是SPI代码的问题,可能是程序中的其他地方影响,需要大家给个思路,我自己查看。
toofree 回答时间:2018-6-14 11:05:28
本帖最后由 toofree 于 2018-6-14 11:07 编辑
watercici 发表于 2018-6-14 11:00
主要是整个工程代码是公司的不方便贴,局部SPI的代码,我查看了好几遍,我觉得从基本配置到读写传输都没 ...

只能告诉你,硬件SPI在一个传送周期内,是不会被打断的。除非出错。既然你都认为SPI代码没问题了,而是其它代码出的问题。没有代码的情况下,如何分析。
watercici 回答时间:2018-6-14 11:21:18
toofree 发表于 2018-6-14 11:05
只能告诉你,硬件SPI在一个传送周期内,是不会被打断的。除非出错。既然你都认为SPI代码没问题了,而是其 ...

好吧,还是谢谢您。
TLLED 回答时间:2018-6-14 14:10:56
可以单独写一个SPI通信程序,单独测试,其他端口不用,查找程序上那儿配置不对。

评分

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

查看全部评分

1234下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版