本帖最后由 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; // 接收完成标志职位
}
}
因为我使用上位机发送的是字符,所以输出的也是字符,这个程序在以前的其他芯片上使用过,是没有问题的,
现在也不知道是怎么回事,每次仿真,iar 编译器就停止了,哎,悲催
你好,
只找到这个函数
/**
rief Clean & Invalidate D-Cache
details Cleans and Invalidates D-Cache
*/
__STATIC_INLINE void SCB_CleanInvalidateDCache (void)
{
#if (__DCACHE_PRESENT == 1U)
uint32_t ccsidr;
uint32_t sets;
uint32_t ways;
SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */
__DSB();
ccsidr = SCB->CCSIDR;
/* clean & invalidate D-Cache */
sets = (uint32_t)(CCSIDR_SETS(ccsidr));
do {
ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
do {
SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) |
((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) );
#if defined ( __CC_ARM )
__schedule_barrier();
#endif
} while (ways--);
} while(sets--);
__DSB();
__ISB();
#endif
}
没有找到你所说的函数
仿真仿着放着就出现如下图片的内容:
14.png (7.97 KB, 下载次数: 0)
下载附件
2017-3-30 19:09 上传
我发送了40个Byte, 再加上回车换行,总共应该是 42个Byte,但是接收到的数据就是没有内容
一周热门 更多>