打印
[STM32L4]

SPI3的问题

[复制链接]
1742|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pegion1001|  楼主 | 2017-9-19 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片是STM32L432KC,使用STM32CUBEMX生成的代码,想用SPI3,可是用万用表测量,SPI3_SCK的时钟信号幅度才几十毫伏呀,而供电电压是3.3的,怎么回事呀?大家帮帮忙
沙发
mmuuss586| | 2017-9-19 10:27 | 只看该作者
用示波器看下,除了时钟,还有数据信号线正常吗?

使用特权

评论回复
板凳
feelhyq| | 2017-9-19 10:33 | 只看该作者
你把SPI配置 CLK空闲时为高电平,看看电压是多少,SPI有4种模式的,默认的可能是SPI模式0,也就是CLK在空闲的时候是低电平

使用特权

评论回复
地板
pegion1001|  楼主 | 2017-9-19 10:50 | 只看该作者
刚用示波器看了MOSI管脚,程序输出0xAA,示波器上能看出波形来,幅度能达到3.3V

使用特权

评论回复
5
pegion1001|  楼主 | 2017-9-19 10:59 | 只看该作者
static void MX_SPI3_Init(void)
{

  hspi3.Instance = SPI3;
  hspi3.Init.Mode = SPI_MODE_MASTER;
  hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi3.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi3.Init.NSS = SPI_NSS_SOFT;
  hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 7;
  hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}
空闲时时钟设置成高了,时钟信号的幅度还是50毫伏左右

使用特权

评论回复
6
feelhyq| | 2017-9-19 11:17 | 只看该作者
本帖最后由 feelhyq 于 2017-9-19 11:19 编辑
pegion1001 发表于 2017-9-19 10:59
static void MX_SPI3_Init(void)
{

发送一个字节后,断点打到发送数据的哪一行代码那里的下一条语句,再量一下CLK的电压

使用特权

评论回复
7
pegion1001|  楼主 | 2017-9-19 11:23 | 只看该作者
feelhyq 发表于 2017-9-19 11:17
发送一个字节后,断点打到发送数据的哪一行代码那里的下一条语句,再量一下CLK的电压 ...

低电平

使用特权

评论回复
8
feelhyq| | 2017-9-19 11:26 | 只看该作者

那就要检查下外围电路了,总结一下你的说法,MOSI能够发送出波形0xAA,说明SPI能够工作,时钟门控,配置什么的都没有什么问题,在SPI发送完一个数据后,SPI的CLK信号在空闲状态下应该是高电平的,你测量到的是低电平。建议断电后,用万用表 量下CLK是否短路了

使用特权

评论回复
9
pegion1001|  楼主 | 2017-9-19 11:27 | 只看该作者
是否是因为管脚跟jtag功能复用引起的,只是在CUBEMX的Pinout界面的SYS->debug选了Serial Wire,但在程序中没看出差别来,还需要做什么么?

使用特权

评论回复
10
feelhyq| | 2017-9-19 11:29 | 只看该作者
pegion1001 发表于 2017-9-19 11:27
是否是因为管脚跟jtag功能复用引起的,只是在CUBEMX的Pinout界面的SYS->debug选了Serial Wire,但在程序中 ...

如果是这样, 那就不连JTAG,把程序烧录到STM3里面,然后断电上电,通过示波器抓一下CLK波形,看看有没有跳动

使用特权

评论回复
11
pegion1001|  楼主 | 2017-9-19 11:35 | 只看该作者
feelhyq 发表于 2017-9-19 11:29
如果是这样, 那就不连JTAG,把程序烧录到STM3里面,然后断电上电,通过示波器抓一下CLK波形,看看有没有 ...

现在我用的是SWD下载Debug的呀

使用特权

评论回复
12
feelhyq| | 2017-9-19 12:03 | 只看该作者
pegion1001 发表于 2017-9-19 11:35
现在我用的是SWD下载Debug的呀

    那你可以不debug吗?

使用特权

评论回复
13
pegion1001|  楼主 | 2017-9-19 14:58 | 只看该作者
在CUBEMXPinout界面的SYS->debug选了Disable,将程序烧录进去,示波器测量SPI3_CLK还是只有不到50毫伏的幅度,MOSI幅度在3.3V,
另在断电情况下用万用表测了,SPI_CLK管脚跟地没有短路,现在SPI3外面没有接任何外设呢

使用特权

评论回复
14
feelhyq| | 2017-9-19 15:00 | 只看该作者
pegion1001 发表于 2017-9-19 14:58
在CUBEMXPinout界面的SYS->debug选了Disable,将程序烧录进去,示波器测量SPI3_CLK还是只有不到50毫伏的幅 ...

MOSI 和CLK信号一起量, 用示波器看看MOSI在发送0xAA波形的时候,CLK始终的变化。 抓瞬时波形。

使用特权

评论回复
15
stm32jy| | 2017-9-19 20:20 | 只看该作者
你这个示波器是多大频率的?

使用特权

评论回复
16
gaoke231| | 2017-9-19 21:35 | 只看该作者
换成SPI2试下,或者用SPI1,有可能是硬件电路的问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

168

帖子

0

粉丝