在线时间4 小时
UID3416377
ST金币5
蝴蝶豆0
注册时间2017-8-23
该用户从未签到
新手上路
- 最后登录
- 2017-8-29
|
4ST金币
各位大神,小弟我头一回接触HAL,上面安排说要做一个SPI的双机通信。我用CUBEMX生成了工程之后在工程里使用HAL_SPI_TransmitReceive_IT()没有反应,软仿真好像也没进去中断。求解:
有关SPI的代码:
uint8_t aSPITxBuffer[1];
uint8_t SPITxbuff[200]={1,2,3,1,2,3,1,2,3,1,2,3};
uint8_t Tx_count_SPI;
uint8_t Tx_Num_SPI;
__IO ITStatus SpiReady_T=RESET;
-----------------------------------------------------------------------以上是全局变量-----------------------------------------------------------------------
aSPITxBuffer[0] = SPITxbuff[k]; //把首元素赋给aSPITxBuffer【0】
hspi1.State = HAL_SPI_STATE_READY;
if(HAL_SPI_TransmitReceive_IT(&hspi1,aSPITxBuffer,aSPIRxBuffer,1) != HAL_OK) //发送接收中断函数
{
Error_Handler();
}
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) //发送中断函数回调
{
uint8_t res=HAL_OK;
aSPITxBuffer[0] = SPITxbuff[k];
k = k + 1; //接连发送数据直到其等于SPITxbuff的个数。
if(k == strlen(SPITxbuff))
{
k = 0;
}
//printf("hello,world");
SPIRxbuff[Rx_count_SPI]=aSPIRxBuffer[0];
if(hspi->Instance == SPI1)
{
if(Rx_count_SPI >= 1)
{
if((SPIRxbuff[Rx_count_SPI-1]==0x0d)&&SPIRxbuff[Rx_count_SPI] == 0x0a)
{
SpiReady_R = SET;
Rx_Num_SPI = --Rx_count_SPI;
Rx_count_SPI=0;
}
else
Rx_count_SPI++;
}
else
Rx_count_SPI++;
}
do
{
res=HAL_SPI_TransmitReceive_IT(hspi,aSPITxBuffer,aSPIRxBuffer,1);
}while(res != HAL_OK);
}
·
|
最佳答案
查看完整内容
你太年轻了。说通信吧,你用hal的非中断方式和库函数的方式都通了吗?
|