OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2787|回复: 9

求助:战舰实现UART1自发自收,并通过LCD显示接收到的内容

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-10-9
在线时间
3 小时
发表于 2018-10-9 13:15:09 | 显示全部楼层 |阅读模式
5金钱
新手上路,很多都不懂,自己摸索着想要实现如题功能,main函数如下,目前请大侠帮忙看看哪里有问题,感谢
int main(void)
{
        u8 TxData[ ]="pass";
        u16 res;
               
        HAL_Init();                                    
       Stm32_Clock_Init(RCC_PLL_MUL9);   
        delay_init(72);                      
        uart1_init(115200);                               
        LED_Init();                                               
        BEEP_Init();
        LCD_Init();
       
    while(1)
    {
                        HAL_UART_Transmit(&UART1_Handler,TxData,4,1000);        //发送数据
                        while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);                //等待发送结束
                        LED0=1;
                        delay_ms(100);
                        LED0=0;
                        delay_ms(100);
                        if(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE)!=RESET)
                        {
                                  res=HAL_UART_Receive(&UART1_Handler,(uint8_t*)USART_RX_BUF,4,1000);
                                  LCD_ShowString(30,100,200,16,32,res);       
                        }

    }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-10-9
在线时间
3 小时
 楼主| 发表于 2018-10-9 15:10:28 | 显示全部楼层
再写了个函数,依然没有返回值。。。
void USART1_SendData(u8 data )        
{
  USART_SendData(USART1, data);   
  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
  USART_ClearFlag(USART1,USART_FLAG_TXE);
}

u8 USART1_ReadData(void )               
{
  u8 data;
  if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) != RESET)
  {
    data =USART_ReceiveData(USART1);
  }
    USART_ClearFlag(USART1,USART_FLAG_RXNE);
    return data;
}

int main(void)
{               

        u8 res;
        delay_init();          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);         
        LCD_Init();
        while(1)
        {
       USART1_SendData(0x55);
                   res=USART1_ReadData();
                   if((res|0xff)==0x55)
                         {
                           LCD_ShowString(30,50,200,16,32,"pass!");
                         }
                   else
                         {
                           LCD_ShowString(30,100,200,16,32,"fail!");
                         }
          }
}
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-10-9 15:21:06 | 显示全部楼层
额  你好像不理解串口是怎么用的啊。你这样是不能实现自己发送给自己的
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-10-9 15:23:41 | 显示全部楼层
你这样是没有意义的,串口通讯要有目标的,比如说你发送了个0X55。你可以用上位机串口助手接受并显示,然后通过上位机的串口助手发送数据给单片机。
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-10-9 15:23:45 | 显示全部楼层
自发自收?
您把TX - RX两根Pin脚对接了吗?
不然谁发资料给来?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-10-9
在线时间
3 小时
 楼主| 发表于 2018-10-9 15:39:00 | 显示全部楼层
douxiaolingyun 发表于 2018-10-9 15:23
你这样是没有意义的,串口通讯要有目标的,比如说你发送了个0X55。你可以用上位机串口助手接受并显示,然后 ...

你好,自发自收是不可以的吗?(不使用上位机)
我想要UART_TX发送给UART_RX,然后把RX中的数据显示出来
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-10-9
在线时间
3 小时
 楼主| 发表于 2018-10-9 15:39:36 | 显示全部楼层
sammy902583 发表于 2018-10-9 15:23
自发自收?
您把TX - RX两根Pin脚对接了吗?
不然谁发资料给来?

是的,自发自收
已用跳线帽把PA9,PA10连起来
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-10-9
在线时间
3 小时
 楼主| 发表于 2018-10-9 16:15:24 | 显示全部楼层
douxiaolingyun 发表于 2018-10-9 15:21
额  你好像不理解串口是怎么用的啊。你这样是不能实现自己发送给自己的

你好,或者我理解的意思是要实现自发自收的话,若不使用串口助手,可以通过UART1与UART2互发实现?单组uart没有意义?
回复

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2018-8-29
在线时间
17 小时
发表于 2018-10-9 16:16:00 | 显示全部楼层
想法很大胆,现实很骨感,还是用上位机吧
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-10-9 16:37:49 | 显示全部楼层
单片机自身的串口通讯我没试过,如果想要的话,你可以两个串口间加485或者232芯片试试。不过个人感觉不行。因为你一个串口发送过去,另一个就马上中断接受数据了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 14:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表