最近刚上手STM32,用他来控制AD5410这个芯片。通信接口是SPI。程序现在不在手头,发不了。
简单的说下这个AD5410,这个芯片用来产生4~20mA工控通讯电流,配置这颗芯片需要STM32一次发送24位的数据,协议比较简单。
再简单说下我的程序,配置了一下STM32的程序GPIO功能和时钟,配置了IO复用时钟,配置了SPI时钟,配置SPI每次发送8位,SPI的使能线GPIO_Pin_4由软件控制。
显然在通信的时候,先使能,然后给SPI连续写三次数据(三次中间里面有判断发送完成标志,这里判断方式基本就是抄的网),然后在不使能芯片。
然后奇怪现象就是为什么那个使能线的信号只保持到了第二个数据发送接受??
然后我就简单测试了下,如果连续写2次数据使能信号只能保持到第一个数据发送结束,如果只发一个的话,使能线会在一个位后就立马被改变了。
再看看以前公司的一个W5200的程序,发现W5200的SPI通信一次其实只要32个位,可是实际程序里面在使能后却忘SPI的发送寄存器里写了5次,最后一次注释写的是发送哑数据,然后再拉高使能IO。
这个和我以前用的ATmega的单片机的硬件SPI有点出入啊,我是刚接触STM32,是我哪里弄的不对么,求指教吐槽拍砖,我统统都收了~~ |