OpenEdv-开源电子网

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

我这种要实现,检测IO状态通过串口发送给上位机,并且最后一位为和校验,这样可以吗?

[复制链接]

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
发表于 2020-12-15 13:36:02 | 显示全部楼层 |阅读模式
1金钱
单片机读取IO口的状态,每个IO对应一个bit位,通过串口发送给上位机,为什么和校验那一个数据位,每次发送一帧数据,和校验哪一位数据位要把上一次的和校验累加起来。
我的程序是放在while(1)循环里面,是不是每次都要扫描一遍?
我这种要实现,检测IO状态通过串口发送给上位机,并且最后一位为和校验,这样可以吗?

最佳答案

查看完整内容[请看2#楼]

计算chekcusm之前不应该清零嘛,常规操作都不记得了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-12-15 13:36:03 | 显示全部楼层
计算chekcusm之前不应该清零嘛,常规操作都不记得了
一分耕耘一分收获。
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-15 13:38:03 | 显示全部楼层
有大佬吗?
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-15 13:44:38 | 显示全部楼层
每次发送就要写入DR寄存器中吗?
回复

使用道具 举报

12

主题

3387

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8632
金钱
8632
注册时间
2020-5-11
在线时间
4070 小时
发表于 2020-12-15 14:21:41 | 显示全部楼层
先别问,先试试,有问题再说。
专治疑难杂症
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-15 15:16:50 | 显示全部楼层
temp_tal_data1.io_f1.a0=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2);//¶áè¡E2μÄ×′쬠      
         temp_tal_data1.io_f1.a1=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3);//¶áè¡E3μÄ×′ì¬
         temp_tal_data1.io_f1.a2=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4);//¶áè¡E4μÄ×′ì¬
         temp_tal_data1.io_f1.a3=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_5);//¶áè¡E5μÄ×′쬠      
         
         temp_tal_data1.io_f1.a4=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6);//¶áè¡E6μÄ×′쬠      
         temp_tal_data1.io_f1.a5=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13);//¶áè¡C13μÄ×′ì¬
         temp_tal_data1.io_f1.a6=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14);//¶áè¡C14μÄ×′ì¬
         temp_tal_data1.io_f1.a7=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_15);//¶áè¡C15μÄ×′쬠      
         
          aRxBuffer_1[0]=0xAA;
          aRxBuffer_1[1]=temp_tal_data1.tal_io_1;
               
         temp_tal_data2.io_f2.b0=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_0);
         temp_tal_data2.io_f2.b1=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_1);
         temp_tal_data2.io_f2.b2=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_2);
         temp_tal_data2.io_f2.b3=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_3);
         
         temp_tal_data2.io_f2.b4=HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_5);
         temp_tal_data2.io_f2.b5=HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_4);
         temp_tal_data2.io_f2.b6=HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_3);
         temp_tal_data2.io_f2.b7=HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_2); //16
         
          aRxBuffer_1[2]=temp_tal_data2.tal_io_2;
               
         temp_tal_data3.io_f3.c0=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_8);
         temp_tal_data3.io_f3.c1=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9);
         temp_tal_data3.io_f3.c2=HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_10);
         temp_tal_data3.io_f3.c3=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_0);
         
         temp_tal_data3.io_f3.c4=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1);
         temp_tal_data3.io_f3.c5=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_2);
         temp_tal_data3.io_f3.c6=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_3);
         temp_tal_data3.io_f3.c7=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);    //24pin
         
          aRxBuffer_1[3]=temp_tal_data3.tal_io_3;
               
               
         temp_tal_data4.io_f4.d0=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);
         temp_tal_data4.io_f4.d1=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5);
         temp_tal_data4.io_f4.d2=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6);
         temp_tal_data4.io_f4.d3=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7);
         
         temp_tal_data4.io_f4.d4=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
         temp_tal_data4.io_f4.d5=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
         temp_tal_data4.io_f4.d6=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
         temp_tal_data4.io_f4.d7=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6); //32pin
         
          aRxBuffer_1[4]=temp_tal_data4.tal_io_4;
               
         temp_tal_data5.io_f5.e0=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_4);
         temp_tal_data5.io_f5.e1=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5);
         temp_tal_data5.io_f5.e2=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
         temp_tal_data5.io_f5.e3=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
         
         temp_tal_data5.io_f5.e4=HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_1);
         temp_tal_data5.io_f5.e5=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_7);
         temp_tal_data5.io_f5.e6=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_8);
         temp_tal_data5.io_f5.e7=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_9); //40pin
         
          aRxBuffer_1[5]=temp_tal_data5.tal_io_5;
               
         temp_tal_data6.io_f6.f0=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_11);
         temp_tal_data6.io_f6.f1=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_12);
         temp_tal_data6.io_f6.f2=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_13);
         temp_tal_data6.io_f6.f3=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_14);
         
         temp_tal_data6.io_f6.f4=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
         temp_tal_data6.io_f6.f5=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
         temp_tal_data6.io_f6.f6=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13);
         temp_tal_data6.io_f6.f7=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12); //48pin
         
          aRxBuffer_1[6]=temp_tal_data6.tal_io_6;
       
   temp_tal_data7.io_f7.g0=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7);
         temp_tal_data7.io_f7.g1=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_6);
         temp_tal_data7.io_f7.g2=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5);
         temp_tal_data7.io_f7.g3=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4);
                  
           aRxBuffer_1[7]=temp_tal_data7.tal_io_7;       
               
//                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);                               
//                HAL_UART_Receive_DMA(&huart1,aRxBuffer_1,9);       
                                        for(i=0;i<8;i++)  sum=sum+ aRxBuffer_1[i];
                                          aRxBuffer_1[8]=sum;

          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);                               
                HAL_UART_Transmit_DMA(&huart1,aRxBuffer_1,9);       
               
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-15 15:18:22 | 显示全部楼层
C:\Users\popch\Desktop
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-15 15:19:11 | 显示全部楼层
typedef  struct
{
                 uint8_t     a0:1;
     uint8_t     a1:1;
                 uint8_t     a2:1;
                 uint8_t     a3:1;
                 uint8_t     a4:1;
                 uint8_t     a5:1;
                 uint8_t     a6:1;
                 uint8_t     a7:1;
}temp_data1;

typedef  struct
{
                 uint8_t     b0:1;
     uint8_t     b1:1;
                 uint8_t     b2:1;
                 uint8_t     b3:1;
                 uint8_t     b4:1;
                 uint8_t     b5:1;
                 uint8_t     b6:1;
                 uint8_t     b7:1;
}temp_data2;

typedef  struct
{
                 uint8_t     c0:1;
     uint8_t     c1:1;
                 uint8_t     c2:1;
                 uint8_t     c3:1;
                 uint8_t     c4:1;
                 uint8_t     c5:1;
                 uint8_t     c6:1;
                 uint8_t     c7:1;
}temp_data3;

typedef  struct
{
                 uint8_t     d0:1;
     uint8_t     d1:1;
                 uint8_t     d2:1;
                 uint8_t     d3:1;
                 uint8_t     d4:1;
                 uint8_t     d5:1;
                 uint8_t     d6:1;
                 uint8_t     d7:1;
}temp_data4;

typedef  struct
{
                 uint8_t     e0:1;
     uint8_t     e1:1;
                 uint8_t     e2:1;
                 uint8_t     e3:1;
                 uint8_t     e4:1;
                 uint8_t     e5:1;
                 uint8_t     e6:1;
                 uint8_t     e7:1;
}temp_data5;

typedef  struct
{
                 uint8_t     f0:1;
     uint8_t     f1:1;
                 uint8_t     f2:1;
                 uint8_t     f3:1;
                 uint8_t     f4:1;
                 uint8_t     f5:1;
                 uint8_t     f6:1;
                 uint8_t     f7:1;
}temp_data6;

typedef  struct
{
                 uint8_t     g0:1;
     uint8_t     g1:1;
                 uint8_t     g2:1;
                 uint8_t     g3:1;
                 uint8_t     g4:1;
                 uint8_t     g5:1;
                 uint8_t     g6:1;
                 uint8_t     g7:1;
}temp_data7;

union
{
                  temp_data1   io_f1;
                  uint8_t             tal_io_1;       
}temp_tal_data1;
       
union
{
            temp_data2   io_f2;
                  uint8_t            tal_io_2;       
}temp_tal_data2;

union
{
            temp_data3   io_f3;
                  uint8_t            tal_io_3;       
}temp_tal_data3;

union
{
            temp_data4   io_f4;
                  uint8_t             tal_io_4;       
}temp_tal_data4;

union
{
            temp_data5   io_f5;
                  uint8_t             tal_io_5;       
}temp_tal_data5;

union
{
            temp_data6   io_f6;
                  uint8_t             tal_io_6;       
}temp_tal_data6;

union
{
            temp_data7    io_f7;
                  uint8_t              tal_io_7;       
}temp_tal_data7;
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-15 15:21:50 | 显示全部楼层
这是串口数据
AA 00 00 00 01 00 00 00 AB
AA 00 00 00 01 00 00 00 56
AA 00 00 00 01 00 00 00 01
AA 00 00 00 01 00 00 00 AC
AA 00 00 00 01 00 00 00 57
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
发表于 2020-12-16 08:50:21 | 显示全部楼层
你这种读取IO状态,要么是设定时器读取,当然放在while(1)也行吧,Readbits,然后运算发串口
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-11-8
在线时间
50 小时
 楼主| 发表于 2020-12-16 09:33:00 | 显示全部楼层
yklstudent 发表于 2020-12-15 13:36
计算chekcusm之前不应该清零嘛,常规操作都不记得了

感谢大佬,我调通了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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