STM32F051的SPI->DR寄存器

[复制链接]
8747|8
 楼主| baiyunfei.k.f 发表于 2013-5-22 10:45 | 显示全部楼层 |阅读模式
本帖最后由 baiyunfei.k.f 于 2013-5-22 17:08 编辑

这两天用到了STM32F051的SPI接口,我将SPI的数据宽度定位8位,在自己的软件中没有用库函数,发数据时直接写寄存器SPI1->DR = (uint8_t)Data;费了不少时间没调通,后来看了下库函数SPI_SendData8,发现发送8位数据位时:
spixbase = (uint32_t)SPIx;
spixbase += 0x0C;
*(__IO uint8_t *) spixbase = Data;
而发送16位数据才是SPIx->DR = (uint16_t)Data;
原先用STM32F103时用SPI发送8位数据就是直接SPI1->DR = (uint8_t)Data;F103的SPI会根据数据位的设置自动从DR寄存器的LSB截取数据,这点和F051不同。
LDTEST 发表于 2013-5-22 16:45 | 显示全部楼层
大坑啊,居然不一致
 楼主| baiyunfei.k.f 发表于 2013-5-22 17:11 | 显示全部楼层
没用库函数,而直接操作寄存器,这点是容易出错,原先直接写寄存器习惯了,调试这点花了不少时间。
cjhk 发表于 2013-5-22 19:08 | 显示全部楼层
不是很了解   感觉调试这一块   需要花费很多的时间   需要好好钻研钻研    帮你顶一个
yang96019 发表于 2014-8-27 11:06 | 显示全部楼层
我也正在调这一块呢
lessonwill 发表于 2014-11-24 11:09 | 显示全部楼层
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
这一句必须要加,否则,嘿嘿。。。
电子发烧者 发表于 2016-6-25 01:19 | 显示全部楼层
lessonwill 发表于 2014-11-24 11:09
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
这一句必须要加,否则,嘿嘿。。。 ...

切记啊!SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);在配置时必须加上,在这里整整卡了一天
flash3g 发表于 2017-2-19 18:18 | 显示全部楼层
lessonwill 发表于 2014-11-24 11:09
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
这一句必须要加,否则,嘿嘿。。。 ...

正解,STM32F0和STM32F1是有点不同
598330983 发表于 2017-2-19 18:57 | 显示全部楼层
是不是两种就是一样的,比如发送两个8BIT的, 就跟发送1个16BIT的一样处理了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

117

主题

574

帖子

3

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