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

STM32duino舵机控制-2

使用定时器进行精确延时,串口接收数据进行

50         0度           --十六进制32

250      180度        --十六进制FA

串口接收到AA 32两个字节,舵机转到0度;接收到AA FA,转到180度。请验证代码:

const unsigned long TIMER_PRESCALER = 72;  // 定时器预分频因子
const unsigned long MICROSECONDS_PER_SECOND = 1000000;  // 每秒微秒数

void setup() {
  Timer4.setPrescaleFactor(TIMER_PRESCALER);  // 设置定时器预分频因子
  Timer4.pause();  // 关闭定时器
  Serial.begin(9600);  // 初始化串口通信
  pinMode(PB9,OUTPUT);
}

char incomedate[2];

void loop() {
if (Serial.available() > 0)//串口接收到数据
  {

    Serial.readBytes(incomedate,2);
    if(incomedate[0]==0xAA)
    {
      //digitalWrite(LED_BUILTIN,LOW);// LED 亮起

      if(incomedate[1]>=50 && incomedate[1]<=250)
        for(int i=0;i<50;i++)
        {
        digitalWrite(PB9,1);
        delayMicrosecondsWithTimer4(incomedate[1]*10);
        digitalWrite(PB9,0);
        delayMicrosecondsWithTimer4(19500);
        }

    }
    if(incomedate[0]=='s')
      Serial.println("test!");
  }

    delay(5);


  
}

void delayMicrosecondsWithTimer4(unsigned long us) {
  HardwareTimer timer(4);  // 创建定时器对象
  unsigned long start = micros();  // 获取当前时间
  while (micros() - start < us) {  // 计算已经延时的微秒数
    timer.setCount(0);  // 将计数器归零
    timer.setOverflow((TIMER_PRESCALER * us) / MICROSECONDS_PER_SECOND);  // 设置溢出值,单位为计数周期
    timer.resume();  // 启动定时器,开始延时
    while (timer.getCount() > 0) {}  // 等待延时完成
    timer.pause();  // 暂停定时器
  }
}
 

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

相关文章:

  • 【知识---如何创建 GitHub 个人访问令牌】
  • GBASE南大通用分享-ConnectionTimeout 属性
  • ChatGPT 全域调教高手:成为人工智能交流专家
  • 5.Hive表修改Location,一次讲明白
  • 基于springboot校园台球厅人员与设备管理系统源码和论文
  • MySQL(下)
  • 如何搭建开源笔记Joplin服务并实现远程访问本地数据
  • 免费分享一套微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~
  • 后端学习:数据库MySQL学习
  • 2024最新版IntelliJ IDEA安装使用指南
  • 消息中间件及java线程池
  • 关于axios给后端发送数据的问题
  • web前端之ES6的实用深度解构赋值方法、复杂的解构赋值
  • uni-app 接口封装,token过期,自动获取最新的token
  • AWS免费套餐——云存储S3详解
  • 2723. 两个 Promise 对象相加
  • 【方法论】费曼学习方法
  • Transformer模型 | Pytorch实现Transformer模型进行时间序列预测
  • Git推送大量内容导致http 413错误
  • pytest框架的基本使用
  • C++STL之map、set的使用和模拟实现
  • 100天精通鸿蒙从入门到跳槽——第18天:ArkTS组件状态管理装饰器
  • 【前端】防抖
  • python对图片或文件的操作
  • 架构篇19:单服务器高性能模式-Reactor与Proactor
  • PyInstaller 将 Python 程序生成可直接运行的程序
  • 专有钉钉开发记录,及问题总结
  • Java Swing桌面项目打包成可执行jar
  • python数组反转的几种方式
  • 算法每日一题: 最大合金数 | 二分