stm32串口中断接收的数据怎么都是0

 我来答
匿名用户
2015-08-01
展开全部
int UART_WriteBuf(u8 byCom, u8 *pBuf, u16 Len)
{
int i = 0;;
if(Len == 0)
return 0;
switch(byCom)
{
case 1 :
Uart_data.send_len = Len - 1;
Uart_data.j = 1;
memmove(Uart_data.send_buff,pBuf,Len);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
USART_SendData(USART1, *pBuf);
break;
case 2 :
Uart_data.send_len = Len - 1;
Uart_data.j = 1;
memmove(Uart_data.send_buff,pBuf,Len);
USART_ITConfig(USART2, USART_IT_TC, ENABLE);
USART_SendData(USART2, *pBuf);
break;
case 3 :
Uart_data.send_len = Len - 1;
Uart_data.j = 1;
memmove(Uart_data.send_buff,pBuf,Len);
USART_SendData(USART3, *pBuf);

USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
break;

}
return Len;
}
void USART3_IRQHandler(void)
{
int j = 0;
if(USART_GetITStatus(USART3,USART_IT_RXNE))
{
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
Uart_data.rec_buff[Uart_data.rec_len] = USART_ReceiveData(USART3);
Uart_data.rec_len ++;
if(Uart_data.rec_len >= UART_DATA_SIZE) //防止数组越界
Uart_data.rec_len = UART_DATA_SIZE - 1;
}
else if(USART_GetITStatus(USART3,USART_IT_TXE))
{
USART_ClearITPendingBit(USART3,USART_IT_TXE);
USART_ClearFlag(USART3,USART_FLAG_TC);
if(Uart_data.j <= Uart_data.send_len)
{
// printf("TC = %d,TXE = %d,FLAG_TC = %d\n\r",USART_GetITStatus(USART3,USART_IT_TC),USART_GetITStatus(USART3,USART_IT_TXE),USART_GetFlagStatus (USART3,USART_FLAG_TC));
USART_SendData(USART3,Uart_data.send_buff[Uart_data.j]);
while(j < 800)
j++;
// printf("interrupt:j = %d,len = %d,buff[%d] = %c,buff = %s\n\n\r",Uart_data.j,Uart_data.len,Uart_data.j,Uart_data.buff[Uart_data.j],Uart_data.buff);
}
else
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
Uart_data.j++;
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式