[STM32L4] SPI3的问题

[复制链接]
2370|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
 楼主| 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毫伏左右
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的电压
 楼主| pegion1001 发表于 2017-9-19 11:23 | 显示全部楼层
feelhyq 发表于 2017-9-19 11:17
发送一个字节后,断点打到发送数据的哪一行代码那里的下一条语句,再量一下CLK的电压 ...

低电平
feelhyq 发表于 2017-9-19 11:26 | 显示全部楼层

那就要检查下外围电路了,总结一下你的说法,MOSI能够发送出波形0xAA,说明SPI能够工作,时钟门控,配置什么的都没有什么问题,在SPI发送完一个数据后,SPI的CLK信号在空闲状态下应该是高电平的,你测量到的是低电平。建议断电后,用万用表 量下CLK是否短路了
 楼主| pegion1001 发表于 2017-9-19 11:27 | 显示全部楼层
是否是因为管脚跟jtag功能复用引起的,只是在CUBEMX的Pinout界面的SYS->debug选了Serial Wire,但在程序中没看出差别来,还需要做什么么?
feelhyq 发表于 2017-9-19 11:29 | 显示全部楼层
pegion1001 发表于 2017-9-19 11:27
是否是因为管脚跟jtag功能复用引起的,只是在CUBEMX的Pinout界面的SYS->debug选了Serial Wire,但在程序中 ...

如果是这样, 那就不连JTAG,把程序烧录到STM3里面,然后断电上电,通过示波器抓一下CLK波形,看看有没有跳动
 楼主| pegion1001 发表于 2017-9-19 11:35 | 显示全部楼层
feelhyq 发表于 2017-9-19 11:29
如果是这样, 那就不连JTAG,把程序烧录到STM3里面,然后断电上电,通过示波器抓一下CLK波形,看看有没有 ...

现在我用的是SWD下载Debug的呀
feelhyq 发表于 2017-9-19 12:03 | 显示全部楼层
pegion1001 发表于 2017-9-19 11:35
现在我用的是SWD下载Debug的呀

    那你可以不debug吗?
 楼主| pegion1001 发表于 2017-9-19 14:58 | 显示全部楼层
在CUBEMXPinout界面的SYS->debug选了Disable,将程序烧录进去,示波器测量SPI3_CLK还是只有不到50毫伏的幅度,MOSI幅度在3.3V,
另在断电情况下用万用表测了,SPI_CLK管脚跟地没有短路,现在SPI3外面没有接任何外设呢
feelhyq 发表于 2017-9-19 15:00 | 显示全部楼层
pegion1001 发表于 2017-9-19 14:58
在CUBEMXPinout界面的SYS->debug选了Disable,将程序烧录进去,示波器测量SPI3_CLK还是只有不到50毫伏的幅 ...

MOSI 和CLK信号一起量, 用示波器看看MOSI在发送0xAA波形的时候,CLK始终的变化。 抓瞬时波形。
stm32jy 发表于 2017-9-19 20:20 | 显示全部楼层
你这个示波器是多大频率的?
gaoke231 发表于 2017-9-19 21:35 | 显示全部楼层
换成SPI2试下,或者用SPI1,有可能是硬件电路的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

168

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部