【发布时间】:2014-10-30 02:41:26
【问题描述】:
我在使用 const char 缓冲区和 char 数组写入 USART 时遇到问题。
这是我的UART写函数:
unsigned int USART_Send( unsigned char *p_pucData,
unsigned int p_unLen)
{
AT91C_BASE_US2->US_TPR = (unsigned int)p_pucData;
AT91C_BASE_US2->US_TCR = p_unLen;
AT91C_BASE_US2->US_PTCR = AT91C_PDC_TXTEN;
while((AT91C_BASE_US2->US_CSR & ((0x1 << 11) | (0x1 << 4) ) ) == 0);
AT91C_BASE_US2->US_PTCR = AT91C_PDC_TXTDIS;
return p_unLen;
}
下面的函数使用 const char* 像:
USART_Send("IsitDone?",9); //Working
如果我使用像下面这样的数组缓冲区,它会显示垃圾字符,不知道为什么?
unsigned char arr[10];
memcpy(arr, "HelloWorld", 10);
USART_Send(arr, sizeof(arr)); //Not working properly displaying Garbage chars
【问题讨论】:
-
哪个处理器,哪个UART,哪个波特率?等等等等
-
顺便说一句,
0x01比1更难阅读。 -
在 ATMEL AT91SAM9M10 控制器上,UART2 和波特率为 115200
-
看起来像内存缓存问题。在 memcpy 之后插入缓存写回指令。
-
我认为可能发生的情况是您正在调用 UART_Send 传递一个局部变量,因此在发送数据之前的任何时刻(这可能需要一些时间取决于波特率),这个内存可以在其他情况下使用。
标签: c microcontroller usart