野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3277|回复: 0

STM32指南者 接收16进制数据并点灯

[复制链接]
发表于 2023-2-20 13:23:28 | 显示全部楼层 |阅读模式
看了野火B站 STM32中级视频P17串口通信,布置作业如题。


自己写了代码,中断函数:
  1. //使用自定义协议接收十六进制数据
  2. extern        uint8_t table_data[9];//这是提前定义一个数组存放接收到的数据
  3. extern  uint8_t table_cp[9];//这是额外定义一个数组,将接收到的数据复制到这里面
  4. extern  uint8_t count;//接收数据计数
  5. void USART1_IRQHandler(void)                        //串口1中断服务程序
  6. {
  7.                 uint8_t Res,i;

  8.                 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
  9.                 {
  10.                         Res =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
  11.                        
  12.                         if(count==0)//如果是接收的第一个数据
  13.                         {
  14.                                 table_data[count]=Res;//将第一个数据存到数据中第一元素
  15.                                 if(table_data[0]==0xCD)//判断接收的第一个数据是不是十六进制0XCD
  16.                                   count++;//如果第一个数据是0XCD则表示正确计数+1
  17.                         }
  18.                         else if(count==1)//第一个数据接收正确的情况下,判断第二个数据
  19.                         {
  20.                                 table_data[count]=Res;
  21.                                 count++;
  22.                         }
  23.                         else if(count>=2)//如果接收数据超过数组大小,则清零重新接收
  24.                         {
  25.                                 count=0;
  26.                         }

  27.     memset(table_cp,0, sizeof(table_data));//在使用数组table_cp时清空
  28.          
  29.                 for(i=0;i<2;i++)//把接收到的数据复制到table_cp数组中
  30.                 {
  31.                          table_cp[i]= table_data[i];
  32.           }
  33.                 for(i = 0 ; i < 2 ;i++){
  34.                         USART_SendData(USART1,table_data[i]);
  35.                 }
  36.                 printf("\n");                       
  37.    }
  38.          
  39.                
  40.                

  41. }
复制代码
  1. #include "stm32f10x.h"                  // Device header     
  2. #include "bsp_usart.h"
  3. #include "bsp_key.h"
  4. #include "bsp_led.h"
  5. #include "stm32f10x_it.h"

  6.           uint8_t table_data[9];//这是提前定义一个数组存放接收到的数据
  7.     uint8_t table_cp[9];//这是额外定义一个数组,将接收到的数据复制到这里面
  8.     uint8_t count=0;//接收数据计数

  9. int main(void){


  10.     // 来到这里的时候系统的时钟已经被配置成72M


  11.         USART_Config();
  12.         LED_GPIO_Config();
  13.        

  14.   //printf("❀❀❀上位机输入十六进制点灯测试❀❀❀\n");   
  15.   
  16.        
  17.         while(1)
  18.         {
  19.        
  20.                 if(table_cp[0]==0xCD)//如果数组第一个十六进制数据是0XCD则进行
  21.                 {
  22.                         uint8_t a = table_cp[1];
  23.                         switch (a){
  24.                                 case 0x01:
  25.                                 LEDR;               
  26.                                 break;
  27.                           case 0x02:
  28.                                 LEDG;                                       
  29.                           break;
  30.                           case 0x03:
  31.                                 LEDB;                               
  32.                           break;
  33.                           case 0x04:
  34.                                 LEDP;                               
  35.                           break;
  36.                           case 0x05:
  37.                                 LEDY;                               
  38.                           break;
  39.                           case 0x06:
  40.                                 LEDW;                               
  41.                           break;
  42.                           case 0x07:
  43.                                 LEDC;                               
  44.                           break;
  45.                           case 0x08:
  46.                                 LEDOFF;                               
  47.                           break;
  48.                           default:
  49.                                 LEDOFF;
  50.                            break;
  51.                        
  52.                         }
  53.                 }
  54.         }
  55. }

  56. void SystemInit(void){

  57. }

复制代码
野火论坛202302201321566989..png
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-9 21:58 , Processed in 0.033734 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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