是的! 重点是如果中断多或者时间不好分配时,只能用硬件,便于调度,但就是不知道怎么用8位或16位发送9位的数据。即便时组装好了,也没法实现发送。 |
GlenXu 发表于 2023-3-8 13:27 对了,我问这个问题的本意也是想知道如何用硬件的SPI输出9位,毕竟硬件的方式速度很快,而不是用IO模拟。 |
yaoyao2022 发表于 2022-5-14 22:18 设置没有问题,不知道怎么产生9位数据到寄存器? 那一位怎么操作后组装到发送“字”中,因为STM32只有8、16、32位操作,9位是怎么组装而成的?! |
似乎很有道理。 |
用硬件是可以用的,但是不能用通用的"库", 要用你自己写的"库",当然,你也可以找找有没有通用的9位的"库", 反正, 我从来不用 "函数库", 搞明白底层原理, 自己写函数自由度和效率不是更高? |
因为这9bit 的SPI 是因为没有RS 引脚,所以需要多一位来区分是送cmd 还是data .当第9位为0时,传送的是cmd . 为1时传送的是data (注:cmd 是指寄存器地址,data 是数据)。 好多年没有弄这个了,我手上还有之前的写的函数。你可以参考看看能不能用。 void SPI_WriteComm(unsigned int i) { unsigned char n,m; SPI_CS = 0; SPI_CLK = 0; SPI_DI = 0; SPI_CLK = 1; m=0x80; for(n=0; n<8; n++) { if(i&m) { SPI_CLK = 0; SPI_DI = 1; SPI_CLK = 1; } else { SPI_CLK = 0; SPI_DI = 0; SPI_CLK = 1; } m=m>>1; } SPI_CS = 1; } void SPI_WriteData(unsigned int i) { unsigned char n,m; SPI_CS = 0; SPI_CLK = 0; SPI_DI = 1; SPI_CLK = 1; m=0x80; for(n=0; n<8; n++) { if(i&m) { SPI_CLK = 0; SPI_DI = 1; SPI_CLK = 1; } else { SPI_CLK = 0; SPI_DI = 0; SPI_CLK = 1; } m=m>>1; } SPI_CS = 1; } |
可以设置 8 位还是9位 |
STM32F030有9位等多位数,但是我不会用! 并且由于容量小,做不了几个程序。 ![]() |
提示:库也是程序。 |
最后问题解决了吗?期待后续结果。 |