你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
wenyangzeng 发表于 2018-3-14 16:49 uart不应该关闭,假设接收缓冲区是:Rx_buf[100], for(i=0;i
newton64 发表于 2018-3-14 17:00 感谢您的回复, 您说的我理解了,不过是这样,诸如您说的那个自己写的缓存我也有,我每次也都会清空。错 ...
wenyangzeng 发表于 2018-3-14 17:02 让ReceiveBuff[xx]=0x00其实这个USART接收不用DMA好像更容易数据处理
newton64 发表于 2018-3-14 17:08 谢谢回复, 我里面也有这样一段:
wenyangzeng 发表于 2018-3-14 17:57 数组!数组!数组!! ReceiveBuff=0;而非ReceiveBuff=0;
查看全部评分
Your UAT Feedback is needed within today.
5.18活动板子会不会是STM32L4呢
STM32隐藏
STM32 CUBE软件中找不到STM32L4系列单片机
应用
AAA
tiwen
BBBB
aaa
2222
感谢您的回复,
您说的我理解了,不过是这样,诸如您说的那个自己写的缓存我也有,我每次也都会清空。错误是发生在用指令从硬件把数据读到缓存时,数据就已经不对了。
HAL_UART_Receive_DMA(&huart1,pR,BUFFERSIZE);
我用的DMA,所以这句里的pR就是我指向缓存的指针。
#define BUFFERSIZE 80
uint32_t ReceiveBuff[BUFFERSIZE]; //接收缓冲匿
uint8_t *pR=(uint8_t *)&ReceiveBuff[0];
(这里的8位32位的原因是因为我用CRC32,所以就转了一下)
也就是说当数据到ReceiveBuff的时候数据就已经错了,我其实是有个疑问:是不是有个硬件缓存在UART端口,我看不见,它会接收垃圾信息和我这次的有用信息合并,然后当我读操作时,会一并读到缓存里,从而我看到的数据就错了?
让ReceiveBuff[xx]=0x00其实这个USART接收不用DMA好像更容易数据处理
谢谢回复,
我里面也有这样一段:
/* 清空接收缓存匿 */
for(int i = 0; i < Rx_len ; i++)
ReceiveBuff=0;
用来清这个缓存。
但如我说的,第二次的数据来的时候,进ReceiveBuff后就不对了,进之前我可以肯定里面是全0的。
确实也许不用DMA会简单很多,但我目前这个不太方便改了,而且感觉是一些新手错误,毕竟我刚接触这个。可能我描述的不够清楚,您有任何质疑我都很乐意详述,谢谢。
数组!数组!数组!!
ReceiveBuff[i++]=0;而非ReceiveBuff=0;
/* 清空接收缓存匿 */
for(int i = 0; i < Rx_len ; i++)
ReceiveBuff=0;
额 是这么写的 怎么写帖子里就那样了呢
评分
查看全部评分