当前位置: 首页 > news >正文

2024.11.4 STM32点灯和简单的数据收发

1.发送函数

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

参数1: UART 处理结构体的指针,该结构体包含了 UART 的所有配置参数。

参数2:要发送的数据指针

参数3:要发送的数据长度(单位:字节)

参数4:超时时间 (单位ms,如果在该时间内没有完成,则直接执行下一条语句,并且返回HAL_timeout)

返回值:

  • HAL_OK: 操作成功。
  • HAL_ERROR: 发生错误

2.接收函数

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

参数:

参数1: UART 处理结构体的指针,该结构体包含了 UART 的所有配置参数。

参数2:要接收数据的变量指针

参数3:要接收的数据长度(单位:字节)

参数4:超时时间 (单位ms,如果在该时间内没有完成,则直接执行下一条语句)

返回值:

  • HAL_OK: 操作成功。
  • HAL_ERROR: 发生错误

以上是HAL库进行数据收发的函数,不过一般使用printf和scanf。因为printf和scanf会调用fputc和fgetc,因此重写fputc和fgetc执行数据收发。在重写之后就可以直接使用printf和scanf函数进行数据的收发。

fgetc重写1:int fputc(int ch,FILE *f){HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,10);return ch;
}fputc重写2:int fputc(int ch,FILE *f){while(!(USART1->ISR&(1<<7)));USART1->TDR=ch;return ch;}fgetc的重写:int fgetc(FILE *f){uint8_t ch;while(!(USART1->ISR&(1<<5)));ch=USART1->RDR;return ch;
}

因为scanf会自动在字符串末尾加上\0(win为\r),因此相较于Hal原生函数,scanf不需要对其他进行关心。

1.当STM32接收到串口助手的命令后,控制马达震动,表示有数据接收

	scanf("%s",buffer);if(!strcmp(buffer,"motor")){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,1);//			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,1);}else{printf("not motor code");}

2.当STM32收到LED1_ON时,打开LED1收到LED1_OFF时,关闭LED1

scanf("%s",buffer);if(!strcmp(buffer,"LED1_ON")){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,1);}else if(!strcmp(buffer,"LED1_OFF")){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,0);}else{printf("not led1 code");}

3.当STM32收到LED3_ON时,打开LED3 收到LED3_OFF时,打开LED3

scanf("%s",buffer);if(!strcmp(buffer,"LED3_ON")){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,1);}else if(!strcmp(buffer,"LED3_OFF")){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);}else{printf("not led3 code");}


4.当STM32收到STATUS时:将LED1 LED3光电开关的状态,推送到串口助手中
 

	if(!strcmp("STATUS",buffer)){int a=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_4);int b=HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13);printf("led1 status :%d",a);printf("led3 status :%d",b);}else{printf("not status code");}

http://www.lryc.cn/news/479313.html

相关文章:

  • Android Studio jcenter 停止服务,改用mavenCentral
  • EasyPOI使用详解
  • 【云原生开发】K8S多集群资源管理平台架构设计
  • 基于SpringBoot的城镇住房保障系统开发
  • 一文解秘Rust如何与Java互操作
  • 手机发展史介绍
  • 【ArcGISPro】单次将自己建立的工具箱添加至Arcpy中
  • docker镜像仓库常用命令
  • springboot 传统应用程序,适配云原生改造
  • D61【python 接口自动化学习】- python基础之数据库
  • 数据库期末考试简答题
  • Java[面试题]-真实面试
  • HTML5新增多媒体支持
  • K8S群集调度二
  • 43.第二阶段x86游戏实战2-提取游戏里面的lua
  • debian系统安装qt的时候 显示xcb相关文件缺失
  • 得物多模态大模型在重复商品识别上的应用和架构演进
  • 基于 SSM(Spring + Spring MVC + MyBatis)框架构建电器网上订购系统
  • 应用插件化及其进程关系梳理
  • Odoo:免费开源的医药流通行业信息化解决方案
  • 系统架构设计师论文:大数据Lambda架构
  • 亚信安全新一代WAF:抵御勒索攻击的坚固防线
  • Flutter 中的那些设计模式的写法(持续更新)
  • 【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
  • Linux系列-进程的状态
  • SpringBoot项目中常用的一些注解
  • 【网络】自定义协议——序列化和反序列化
  • Pytorch如何精准记录函数运行时间
  • 使用 Java 实现邮件发送功能
  • html第一个网页