本帖最后由 hpdell 于 2017-3-30 12:05 编辑
F7的单片机,开启 cache 后,uart-idl+dma接收不到数据,中断可以进入,
SCB_EnableICache(); //使能I-Cache
SCB_EnableDCache(); //使能D-Cache 后,
使用usart+dma 接收就不行
屏蔽后uart+dam可以,但sd卡又不行
该如何处理啊 ??
sd卡使用 查询模式,
感觉这个f7的 cache 使用起来很麻烦,
其他的 mpu 保护还没有进行任何设置
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
可以进入 uart idl 空闲中断里面,接收到的数据字节数是对的,
相关代码如下:
/* 此函数需要在主循环中调用 */
void USART1_DMA_IDLE_TEST(void)
{
if(g_tUsart1.RxCompleteFlag ==1)
{
// printf(" g_tUsart1.RxCnt = %d ",g_tUsart1.RxCnt); // 这个地方输出接收到的字节数与发送的字节数目完全一致
printf("%s" , g_tUsart1.RxBuff); // 这个地方是吧接收到的数据 发回到电脑显示,但是这个地方木有内容输出 ?????????????????问题就在此处
g_tUsart1.RxCnt=0;
g_tUsart1.RxCompleteFlag=0;
}
HAL_UART_Receive_DMA(&huart1,g_tUsart1.RxBuff,USART1_MAX_RX_SIZE);
}
// 中断函数
void USART1_IRQHandler(void)
{
uint32_t tmp_flag = 0;
uint32_t temp;
tmp_flag = __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE);
if((tmp_flag != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
//先读SR后读DR清除Idle
temp = huart1.Instance->ISR;
temp = huart1.Instance->RDR;
HAL_UART_DMAStop(&huart1);
temp = hdma_usart1_rx.Instance->NDTR;
g_tUsart1.RxCnt = USART1_MAX_RX_SIZE - temp;
// printf(" g_tUsart1.RxCnt = %d",g_tUsart1.RxCnt); // test user
g_tUsart1.RxCompleteFlag = 1; // 接收完成标志职位
}
}
一周热门 更多>