OpenEdv-开源电子网

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

串口通讯问题,规定通讯协议,两个单片机互相收发

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-7-1
在线时间
11 小时
发表于 2019-8-3 22:00:11 | 显示全部楼层 |阅读模式
6金钱
老师规定了一个通讯协议,串口通讯。
两个32单片机之间通讯
协议是:起始符03H
             数据类型首字母的ASCII码:例速度  S  083,在转换到16进制发送
             数据的十位、个位、小数点后一位。同样要十六进制发送
             结束符:3AH

32F103会点,Send_Data()函数会用,奈何C语言基础太差,百度了好多东西,都看不懂,程序也写不出来,关键还不知道怎么发送,是一个一个发送还是,一串全部发送。身边也没有用可以问的人,百度也不是我想要的东西,所以不用再让我去百度了。
我就想大佬们能给我写个发送这个东西的代码,或者给点思路也行我参考参考。是在是想学东西,现在学C语言有点来不及,过几天就要用。
在网上看了一个程序:
void Send_Data(USART_TypeDef * USARTx,u8*len)
{
while(*len!='\0')
{     
  while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);   
  USART_SendData(USARTx,*len);
  len++;
}
}
这是个封装吧,但是我不会在main中用封装,现在时间不允许我去在把这些学一遍,我就想要点思路

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

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2018-10-25
在线时间
28 小时
发表于 2019-8-3 23:07:58 | 显示全部楼层
兄弟,去看看正点原子的配套例程
回复

使用道具 举报

23

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2019-7-20
在线时间
108 小时
发表于 2019-8-4 08:14:09 来自手机 | 显示全部楼层
可以联系我们,qq515580142
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-7-1
在线时间
11 小时
 楼主| 发表于 2019-8-4 10:24:27 | 显示全部楼层
willli 发表于 2019-8-3 23:07
兄弟,去看看正点原子的配套例程

那个串口通讯的视频我看了挺多遍了,就是不会把老师规定这个通讯协议发出去
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-7-1
在线时间
11 小时
 楼主| 发表于 2019-8-4 10:43:04 | 显示全部楼层
/*****************  发送一个字节**********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
        /* 发送一个字节数据到USART */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送寄存器为空 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}

/****************** 发送八位的数组 ************************/
void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)
{
  uint8_t i;
       
        for(i=0; i<num; i++)
  {
            /* ·等待发送一个字节数据到USART */
            Usart_SendByte(pUSARTx,array[i]);       
  
  }
        /* 等待发送完成 */
        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
}

/*****************  发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
        unsigned int k=0;
  do
  {
      Usart_SendByte( pUSARTx, *(str + k) );
      k++;
  } while(*(str + k)!='\0');
  
  /*等待发送完成 */
  while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
  {}
}

/*****************  发送一个16位数 **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{
        uint8_t temp_h, temp_l;
       
        /* 取出高八位 */
        temp_h = (ch&0XFF00)>>8;
        /* 取出低八位 */
        temp_l = ch&0XFF;
       
        /* 发送高八位 */
        USART_SendData(pUSARTx,temp_h);       
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
       
        /* 发送低八位 */
        USART_SendData(pUSARTx,temp_l);       
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}
我现在把发送程序写出来了,现在的问题是不知道main里边的程序怎么写
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 19:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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