打印
[其他ST产品]

STM8S标准库TIM1编码器功能不计数,请大师帮我看看

[复制链接]
380|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
classroom|  楼主 | 2024-8-16 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上根本找不到用STM8S标准库写的TIM1编码器计数功能示例,,很是郁闷,没办法用chatgpt搞出如下代码,

但是TIM1_GetCounter()根本读不出计数,请教差在哪里??

硬件电路肯定没问题,用外部中断可以正常实现ec11选择功能

#include "stm8s.h"

#define MAX_VOLUME 100  // 定义最大音量值
#define MIN_VOLUME 0    // 定义最小音量值

volatile int16_t volume = 50; // 初始音量设为50

// 初始化TIM1作为编码器接口
void TIM1_Encoder_Init(void) {
    // 1. 使能TIM1时钟
    CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, ENABLE);

    // 2. 配置GPIO引脚作为编码器输入
    // 假设编码器的A、B信号连接到TIM1_CH1(PA7)和TIM1_CH2(PA6)
    GPIO_Init(GPIOA, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT); // 配置PA6为浮空输入
    GPIO_Init(GPIOA, GPIO_PIN_7, GPIO_MODE_IN_FL_NO_IT); // 配置PA7为浮空输入

    // 3. 配置TIM1为编码器模式
    TIM1_EncoderInterfaceConfig(
        TIM1_ENCODERMODE_TI12,  // 选择编码器模式,使用TI1和TI2
        TIM1_ICPOLARITY_RISING, // TI1上升沿捕获
        TIM1_ICPOLARITY_RISING  // TI2上升沿捕获
    );

    // 4. 配置计数器方向为自动重载(上下计数模式)
    TIM1_CounterModeConfig(TIM1_COUNTERMODE_UP);
    TIM1_SetCounter(0); // 初始化计数器值为0

    // 5. 启动定时器
    TIM1_Cmd(ENABLE);
}

// 更新音量值,根据编码器的增量变化
void UpdateVolume(void) {
    int16_t encoderValue = TIM1_GetCounter();

    // 根据编码器的计数变化调整音量
    if (encoderValue > 0) {
        // 增加音量
        volume += encoderValue;
        if (volume > MAX_VOLUME) {
            volume = MAX_VOLUME; // 限制音量在最大值
        }
    } else if (encoderValue < 0) {
        // 减少音量
        volume += encoderValue; // encoderValue为负数
        if (volume < MIN_VOLUME) {
            volume = MIN_VOLUME; // 限制音量在最小值
        }
    }

    TIM1_SetCounter(0); // 重置计数器以便下次计算增量
}

int main(void) {
    // 初始化系统时钟
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

    // 初始化TIM1编码器
    TIM1_Encoder_Init();

    while (1) {
        // 更新音量值
        UpdateVolume();

        // 此处可以根据新的音量值进行相应的操作
        // 比如,调整音频输出的实际音量
    }
}

使用特权

评论回复
沙发
狄克爱老虎油| | 2024-8-17 22:40 | 只看该作者
还有专门的编码器模式吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

432

主题

2128

帖子

1

粉丝