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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版