新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2016-8-17
- 在线时间
- 6 小时
|
1金钱
我是刚刚开始接触STM32的板子,用的是一块nucleoF103RB的板子。
我想实现的效果是板子上串口1,串口2都工作,一个数据发送装置发送数据到串口1,串口1RX接收然后通过串口2的发送TX发到我笔记本电脑。
但是经过学习了原子哥串口通讯和中断的教程之后,我想先实现下串口1,串口2我都接在笔记本上,通过sscom串口调试助手,开两个,一个发给串口1数据,一个从串口2收到我发的数据然后显示在调试助手里。这样我理解之后对我实现我最终的目标会更有帮助。
USART的基本配置在usart.c里我基本已经看懂,但是对于串口中断服务程序和main函数的循环怎么写还望各位指教一下,下面贴出代码,都是在原子哥的教程基础上改动的。
void USART1_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000)
{
if(Res!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x8000;
}
else
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
}
}
}
}
串口中断配置是完全复制的,就是在发送最后要写入一个新行发送,while循环其实我也不知道要怎么写
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3FFF;
printf("\r\n发送数据为:\r\n\r\n");
for(t=0;t<len;t++)
{
USART2->DR=USART_RX_BUF[t];
while((USART2->SR&0X40)==0);
}
USART_RX_STA=0;
}else
{ printf("message\n");
}
}
}
求各位老师指教
|
|