打印

STM32F051的SPI->DR寄存器

[复制链接]
7633|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 | 只看该作者
不是很了解   感觉调试这一块   需要花费很多的时间   需要好好钻研钻研    帮你顶一个

使用特权

评论回复
5
yang96019| | 2014-8-27 11:06 | 只看该作者
我也正在调这一块呢

使用特权

评论回复
6
lessonwill| | 2014-11-24 11:09 | 只看该作者
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
这一句必须要加,否则,嘿嘿。。。

使用特权

评论回复
7
电子发烧者| | 2016-6-25 01:19 | 只看该作者
lessonwill 发表于 2014-11-24 11:09
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
这一句必须要加,否则,嘿嘿。。。 ...

切记啊!SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);在配置时必须加上,在这里整整卡了一天

使用特权

评论回复
8
flash3g| | 2017-2-19 18:18 | 只看该作者
lessonwill 发表于 2014-11-24 11:09
SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
这一句必须要加,否则,嘿嘿。。。 ...

正解,STM32F0和STM32F1是有点不同

使用特权

评论回复
9
598330983| | 2017-2-19 18:57 | 只看该作者
是不是两种就是一样的,比如发送两个8BIT的, 就跟发送1个16BIT的一样处理了。

使用特权

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

本版积分规则

115

主题

564

帖子

3

粉丝