金牌会员
 
- 积分
- 1292
- 金钱
- 1292
- 注册时间
- 2014-12-20
- 在线时间
- 534 小时
|
发表于 2016-1-3 12:42:40
|
显示全部楼层
本帖最后由 BMN李 于 2016-1-3 12:48 编辑
[mw_shl_code=c,true]//定义2倍长,防止下一次数据将上一次数据覆盖
#defint UART_CNT_MAX (64 * 2)
uint8_t uart_buf[UART_CNT_MAX] = { 0, 0 };
uint8_t uart_cnt = 0;
//64个数据接收完成标志
uint8_t uart_finish_flag = 0;
uint8_t uart_buf_tmp[UART_CNT_MAX] = { 0, 0 };
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
//接收数据
uart_buf[uart_cnt ++] = USART_ReceiveData(USART3);
if(uart_cnt == 64)
{
//转存数据
memcpy(uart_buf_tmp, uart_buf, 64);
uart_finish_flag = 1;
}
else if(uart_cnt == 64 * 2)
{
//转存数据
memcpy(uart_buf_tmp + 64, uart_buf + 64, 64);
uart_finish_flag = 2;
}
if(uart_cnt >= UART_CNT_MAX) uart_cnt = 0;
}
}
void main(void)
{
uint8_t i = 0;
while(1)
{
if(uart_finish_flag == 1)
{
for(i = 0;i < 64;i ++)
{
USART_SendData(USART3, uart_buf_tmp);
}
uart_finish_flag = 0;
}
else if(uart_finish_flag == 2)
{
for(i = 0;i < 64;i ++)
{
USART_SendData(USART3, uart_buf_tmp[64 + i]);
}
uart_finish_flag = 0;
}
}
}[/mw_shl_code]
不知道效果如何,未测试。
|
|