资深版主
- 积分
- 10541
- 金钱
- 10541
- 注册时间
- 2017-2-18
- 在线时间
- 1908 小时
|
本帖最后由 peng1554 于 2018-12-28 15:01 编辑
http://www.openedv.com/forum.php?mod=viewthread&tid=285681&extra=
有用户问到两103ZET6芯片如何实现串口通信,所以改了这个程序,程序参考该帖子http://www.openedv.com/forum.php?mod=viewthread&tid=284685
实现的功能是:
A板(战舰V3/精英)通过串口1与串口调试助手对话,A板在收到上位机发过来的数据
(以回车换行结束)后,将数据通过串口2发送给B板(战舰V3/精英)的串口2,B板的串口2
接收到数据后将数据发送给B板串口1打印,数据显示在串口调试助手上。
需要注意的是:
1,电脑端串口调试助手波特率必须是115200.
2,请使用XCOM/SSCOM串口调试助手,其他串口助手可能控制DTR/RTS导致MCU复位/程序不运行
3,串口输入字符串以回车换行结束.
4,请用USB线连接在USB_232,找到USB转串口后测试本例程.
5,P4的PA9/PA10(精英板子是P3的PA9/PA10)必须通过跳线帽连接在RXD/TXD上.
6,A板的PA2,PA3分别接B板子的PA3,PA2,接法见下图
整个程序重要的是usart2.c和usart2.h,这两文件的程序与usart.c和usart.h类似。所以
请参考战舰V3/精英的F1开发指南手册关于串口通信实验章节部分
main()实现的是串口数据的处理。
当串口1接收到来自上位机的数据后,通过串口1打印数据到上位机,同时并将收到的数据转发给串口2,进入通过串口2发送数据给另外一块板子
当串口2接收到了来自另一块板子发来的数据是将串口2收到的数据转发给串口1,同时并将数据通过串口1打印到上位机
[mw_shl_code=c,true]int main(void)
{
u8 t;
u8 reclen=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口1初始化为115200
usart2_init(115200); //串口2初始化为115200
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
if(USART_RX_STA&0X8000) //接收到一次数据了
{
reclen=USART_RX_STA&0X7FFF; //得到数据长度
USART_RX_BUF[reclen]=0; //加入结束符
for(t=0;t<reclen;t++)
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); //等待发送结束
USART_SendData(USART2, USART_RX_BUF[t]); //向串口2发送数据
}
u2_printf("\r\n\r\n");//插入换行
printf("USART_RX_BUF:%s\r\n",USART_RX_BUF);
printf("reclen:%d\r\n",reclen);
USART_RX_STA=0;
}
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
reclen=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_BUF[reclen]=0; //加入结束符
for(t=0;t<reclen;t++)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); //等待发送结束
USART_SendData(USART1, USART2_RX_BUF[t]); //向串口1发送数据
}
printf("\r\n\r\n"); //插入换行
printf("reclen:%d\r\n",reclen);
USART2_RX_STA=0;
}
}
}[/mw_shl_code]
|
|