でSPIを介してデータを送信/受信しません、MODER = 0xa2a0556aSTM32072RBは、私は次のような構成とスレーブモードでSPI2を介してデータを送受信するためのuCを使用していますスレーブモード
また、APB1ENRも正しく構成されています。
現在のプログラムは、RXNEフラグをチェックし、受信したデータをDRから読み取り、ランダム値をDRに送信します。
ステータスレジスタには次の値があります。SR = 0x1403 マスタがデータを正しく送信し、スレーブピンで信号をチェックしました(クロック位相と極性が両側で同じで、NSS信号がクリアされています) MOSIを介してSCKとデータを送信する前に)。私はピンを入力として設定していて、マスターが送ることができるデジタル信号を読み取ることができることを知っています。現在の設定では、マスターがデータを送信するときにRXNEが設定されているが、読み取り値は常に0x00であるため、スレーブは何かを受信するようです。私はさまざまな構成(ソフトウェア/ハードウェアNSS、異なるデータサイズ...)を試みましたが、私は常に0x00を取得します。さらに、DRを読み込んだ後に送信するランダム値は出力に送られません。それは私の現在の機能であり、これは連続的に呼び出されます:
unsigned char spi_rx_slave(unsigned char spiPort, unsigned char *receiveBuffer)
{
uint8_t temp;
static unsigned long sr;
if (!spi_isOpen(spiPort))
{
sendDebug("%s() Error: spiPort not in use!\r\n",__func__);
return false;
}
if (spiDescriptor[spiPort]->powerdown == true)
{
sendDebug("%s() Error: spiPort in powerdown!\r\n",__func__);
return false;
}
/* wait till spi is not busy anymore */
while((spiDescriptor[spiPort]->spiBase->SR) & SPI_SR_BSY)
{
sendDebug("SPI is busy(1)\r\n");
vTaskDelay(2);
}
sendDebug("CR1 = 0x%04x, ", spiDescriptor[spiPort]->spiBase->CR1);
sendDebug("CR2 = 0x%04x, ", spiDescriptor[spiPort]->spiBase->CR2);
sendDebug("AFRH address = 0x%08x, AFRH value = %08x, ", (unsigned long*)(GPIOB_BASE+0x24), *(unsigned long*)(GPIOB_BASE+0x24));
sendDebug("MODER address = 0x%08x, MODER value = %08x\r\n", (unsigned long*)(GPIOB_BASE), *(unsigned long*)(GPIOB_BASE));
sr = spiDescriptor[spiPort]->spiBase->SR;
while(sr & SPI_SR_RXNE)
{
/* get rx byte */
temp = *(uint8_t *)&(spiDescriptor[spiPort]->spiBase->DR);
spiDescriptor[spiPort]->spiBase->DR = 0x53;
sendDebug("-------->DR address = 0x%08x, data received: 0x%02x\r\n", &spiDescriptor[spiPort]->spiBase->DR, temp);
sendDebug("SR = 0x%04x\r\n", sr);
vTaskDelay(1);
sr = spiDescriptor[spiPort]->spiBase->SR;
}
while((spiDescriptor[spiPort]->spiBase->SR) & SPI_SR_BSY)
{
sendDebug("SPI is busy(2)\r\n");
vTaskDelay(2);
}
return true;
}
私は間違っていますか?私が正しく構成しなかったものはありますか?前もって感謝します。 よろしくお願いします。 Javier
_ "CR1 = 0x0078、CR2 = 0x0700、AFRH = 0x55353500、MODER = 0xa2a0556a"まず質問と構成を人間が読めるようにします。私たちの時間を尊重してください。 –
マスターはクロックを生成しますか?そうでない場合は、何も送信しません。バイトを送信する場合は、DRをバイトにキャストする必要があります。 –
はい、マスタはクロックを正しく生成し、そのクロックを受信するとSPIはRXNEフラグをアクティブにします。 – JaviC