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

通用定时器捕获实验20240920

通用PWM捕获

    gtim_timx_pwm_chy_init(5000 - 1,1700 - 1);   /* 100k HZ计数频率,50ms的周期,占空比为50%,也就是高电平时间 = 25ms = 25000us */

ARR是5000-1,系统时钟频率170mhz,PWM频率=定时器时钟频率/(ARR+1)(PSC+1)=170mhz/(5000*1700)=20HZ,PWM周期=1/20=0.05s=50ms

占空比=比较值/(ARR+1)

捕获频率的计算:
计数频率=时钟频率/(ARR+1)


extern uint8_t  g_timxchy_cap_sta;               /* 输入捕获状态 */
extern uint16_t g_timxchy_cap_val;               /* 输入捕获值 */

int main(void)
{
    uint32_t temp = 0;
    uint8_t t = 0;
    
    HAL_Init();                                  /* 初始化HAL库 */
    sys_stm32_clock_init(85, 2, 2, 4, 8);        /* 设置时钟,170Mhz */
    delay_init(170);                             /* 延时初始化 */
    usart_init(115200);                          /* 初始化串口 */
    led_init();                                  /* 初始化LED */
    gtim_timx_pwm_chy_init(5000 - 1,1700 - 1);   /* 100k HZ计数频率,50ms的周期,占空比为50%,也就是高电平时间 = 25ms = 25000us */
    gtim_timx_cap_chy_init(0xFFFF - 1, 170 - 1); /* 以1Mhz的频率计数 捕获 */
    //0xFFFF:65534 这允许在较长的时间内进行捕获而不会溢出
    while (1)
    {
        if (g_timxchy_cap_sta & 0X80)            /* 成功捕获到了一次高电平 */
        {
            temp = g_timxchy_cap_sta & 0X3F;
            temp *= 0xFFFF;                      /* 溢出时间总和 */
            temp += g_timxchy_cap_val;           /* 得到总的高电平时间 */
            printf("HIGH:%d us\r\n", temp);      /* 打印总的高电平时间 */
            g_timxchy_cap_sta = 0;               /* 开启下一次捕获 */
        }

        t++;
        if (t > 20)                              /* 200ms进入一次 */
        {
            t = 0;
            LED0_TOGGLE();                       /* LED0闪烁,提示程序运行 */
        }
        delay_ms(10);
    }
}

&0x80 :检查左边第一位是否是1 ,它是1才可以进行if后的语句
至于为什么位7为1 就表示捕获成功的原因:
位0:捕获启动
位1:捕获溢出
位7:捕获成功

temp = g_timxchy_cap_sta & 0X3F :
0X3F:0011 1111

(uart:直接用printf 就可以)
溢出时间总和=溢出次数*溢出时间


http://www.kler.cn/news/311899.html

相关文章:

  • 【软件方案】智慧社区总体解决方案(PPT原件)
  • Docker安装以及简单使用
  • 在线安全干货|如何更改IP地址?
  • 基于单片机的风机故障检测装置的设计与实现(论文+源码)
  • 批量处理docker容器以及镜像的脚本
  • 一、Numpy使用
  • C语言从头学61——学习头文件signal.h
  • 什么是“云原生”
  • Mysql梳理6——order by排序
  • 在 VS Code 中调试 C++ 项目
  • 【数据结构】动态开点线段树
  • 基于Android Studio 蜜雪冰城(奶茶饮品点餐)—原创
  • Java ERP系统源码深度解析:Spring Cloud Alibaba和Spring Boot的微服务实战
  • 云WAF能做什么?看它如何帮你应对网络攻击
  • 武汉网站建设实施方案
  • 猫咪为什么不吃猫罐头?解决挑食小猫!美味主食罐推荐!
  • 2.4 数据库表字段约束
  • 水经微图PC版5.0.0即将内测
  • MATLAB数学规划:2.线性规划
  • 分享一个 在线拍卖系统 商品竞拍平台Java、python、php三个技术版本(源码、调试、LW、开题、PPT)
  • MATLAB系列03:分支语句和编程设计
  • 指挥中心操作台怎么布局更合理
  • Can‘t connect to local MySQL server through socket
  • 【线性规划求解系列】MATLAB中使用linprog解决线性规划问题
  • 【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)
  • 大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解
  • Linux 环境永久更换国内pip镜像源地址
  • 【MySQL】表的相关操作
  • 你敢相信吗,我用AI撸了一个在线计算器网站!
  • ElasticSearch7整合es-head,ES配置密码