用的都是最新的cubemx和库。
我用模拟的方式测试芯片dac8552 , 一切正常,输入0xffff的时候是5v输出。
用spi的时候。
1: cubemx的bug: 选择transmit only master , 生成的代码里面还是hspi1.Init.Direction = SPI_DIRECTION_2LINES; 每次手工改1LINE.
2: 应该是芯片bug? 波特率已经是最低256分频了。
使用HAL_SPI_Transmit( &__SPIx, Buf, 3, 0xffffu ); 或者自己写的 _spi_send_8(CPU_INT08U val)
各种乱跳。要么是输入0xffff时输出2.5V,只有正常的一半。 要么时不时没有响应。
我看了下hal里面的代码。。。
if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
{
if (hspi->TxXferCount > 1U)
{
/* write on the data register in packing mode */
hspi->Instance->DR = *((uint16_t *)pData);
我自己写的_spi_send_8也是等待txe。
但是网上看到这么一个文字
https://www.cnblogs.com/swblog/p/3344736.html
经试验发现,在单线模式下,只能使用SPI_I2S_FLAG_BSY标志来判断设备是否空闲,而不能使用SPI_I2S_FLAG_TXE发送完成标志。
SPI1->DR = byte; while((SPI1->SR & SPI_I2S_FLAG_BSY) != RESET); //等待SPI忙完,这里不能使用SPI_I2S_FLAG_TXE发送完成标志,只能使用SPI_I2S_FLAG_BSY标志
迷茫了。。。
试验3:我用了全双工2LINE模式测试,还是发现芯片不太稳定,表现为有时候输入没反应。。。 |