STM32F103C6T6的两个SPI模块自通信实验中SPI2无法工作的问题

项目场景:

最近打算用STM32的最小系统版进行SPI通信实验,想首先验证SPI工作是否正常及观察收发数据是否正确,便进行STM32F103上SPI1和SPI2自通信。


问题描述

利用单步调试观察SPI1和SPI2寄存器的值,发现SPI1中各个寄存器的值符合预先设定,SPI2中寄存器的值都为零。
(0x40013000是SPI1的存储器映像地址,0x40003800是SPI2的存储器映像地址)
上图中


原因分析:

首先检查了SPI1和SPI2时钟及所在管脚的时钟是否开启,代码如下:

	/* 打开GPIOA、GPIOB时钟 */
  	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB ,ENABLE); 
  	/* 打开SPI2时钟 */
  	RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2,ENABLE ); //低速APB(APB1)
	/* 打开SPI1时钟 */
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1,ENABLE ); //高速APB(APB2)

之后再网上看到了这篇文章:https://bbs.21ic.com/icview-2577580-1-2.html,怀疑STM32F103C6T6是否有SPI2模块,查阅芯片手册:
在这里插入图片描述
发现C6T6版本属于小容量产品,没有SPI2模块,之前一直看的是下面这张表格:
在这里插入图片描述
真是粗心,没有注意到C6T6属于小容量产品,之前一直把C6T6当做C8T6用,而C8T6产品是有两个SPI模块的。


解决方案:

后来把C6T6更换为C8T6,在寄存器窗口中可以观察到SPI2成功配置完成:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e7fd218139e54a10bb335f597a063a30.png

记录一下调试过程中的bug,希望能帮助更多遇到同样问题的人

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值