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

博主在使用STM32F103进行SPI通信实验时,发现SPI2所有寄存器值为零。经过检查时钟配置和查阅资料,意识到C6T6版本不包含SPI2模块,而误以为它与C8T6相同。更换为C8T6后,SPI2配置成功。此篇记录了这一调试过程,提醒读者注意不同STM32型号间的功能差异。

项目场景:

最近打算用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,希望能帮助更多遇到同样问题的人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值