RZ-51 6合1扩展板原理图.pdf:https://download.csdn.net/download/ZLK1214/29016144https://download.csdn.net/download/ZLK1214/29016144

/* 本程序测试时使用的是锐志电子六合一扩展板上的数字旋转编码开关 */
#include <stm32f10x.h>int main(void)
{/* 打开外设时钟 */RCC->APB1ENR = RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN;RCC->APB2ENR = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN;/* I/O端口配置 */GPIOA->CRL = 0x88000000; // PA6为通道1, PA7为通道2, 设为带电阻输入GPIOA->BSRR = GPIO_BSRR_BS6 | GPIO_BSRR_BS7; // PA6~7带上拉电阻输入GPIOA->CRH = 0x00080000; // PA12设为带电阻输入GPIOA->BSRR = GPIO_BSRR_BS12;GPIOB->CRH = 0x33333333; // 数码管段选GPIOC->ODR = 0x3000; // 熄灭数码管GPIOC->CRH = 0x00333333; // 数码管位选/* 数码管扫描中断配置 */// 每隔一定时间点亮一个数码管// 从低位向高位扫描TIM2->ARR = 29; // 0~29有30个数字, 定时时间30*0.1ms=3ms, 向上计数, 每当TIM2->CNT跳变到0时触发一次中断TIM2->PSC = 7199; // 对72MHz进行7200分频, 得到的频率是10kHz, 也就是0.1msTIM2->EGR = TIM_EGR_UG; // 立即触发TIM2中断, 点亮数码管, 同时刷新寄存器TIM2->DIER = TIM_DIER_UIE; // 允许触发定时器溢出中断NVIC_EnableIRQ(TIM2_IRQn); // 允许执行中断服务函数, 该函数位于core_cm3.h, 是MDK自带的函数, 不是库函数TIM2->CR1 = TIM_CR1_CEN; // 开定时器/* 数字编码开关计数器配置 */// 将数字编码开关的1、3脚分别接到TIM3定时器的通道1~2输入端口PA6~7上TIM3->ARR = TIM_ARR_ARR; // 计数的最大值为65535TIM3->CCMR1 = TIM_CCMR1_CC1S_0; // CC1S=01(IC1映射到TI1)TIM3->CCMR1 |= TIM_CCMR1_CC2S_0; // CC2S=01(IC2映射到TI2)// 以下三种模式任选一种即可TIM3->SMCR = TIM_SMCR_SMS_0; // SMS=001, 对通道1计数//TIM3->SMCR = TIM_SMCR_SMS_1; // SMS=010, 对通道2计数//TIM3->SMCR = TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0; // SMS=011, 同时对通道1,2计数(计数速度更快)TIM3->CCER = TIM_CCER_CC1P; // 反转TI1的电平, 顺时针旋转时使计数值增加而不是减少(默认是减少)// 也可以改为反转TI2的电平, 这个和上面SMS的选择无关TIM3->EGR = TIM_EGR_UG; // 刷新寄存器TIM3->CR1 = TIM_CR1_CEN; // 开始计数/* 开PA12外中断 */EXTI->IMR = EXTI_IMR_MR12;EXTI->FTSR = EXTI_FTSR_TR12; // 下降沿触发NVIC_EnableIRQ(EXTI15_10_IRQn);NVIC_SetPriority(EXTI15_10_IRQn, 1); // 该中断优先级比数码管扫描中断的优先级低, 不会影响数码管扫描while (1);
}// 数码管动态扫描
void TIM2_IRQHandler(void)
{static uint8_t pos = 5;static uint32_t numbuf;const uint8_t seg8[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};if (TIM2->SR & TIM_SR_UIF) // 定时器2溢出中断{TIM2->SR &= ~TIM_SR_UIF; // 清中断标志if (pos == 5)numbuf = TIM3->CNT; // 取定时器3的计数值elsenumbuf /= 10;GPIOC->ODR = (GPIOC->ODR & 0xf0ff) | 0x3000; // 关闭位选GPIOB->ODR = (GPIOB->ODR & 0xff) | (seg8[numbuf % 10] << 8); // 设置显示字符if (pos <= 3)GPIOC->ODR |= 1 << (pos + 8); // 数码管1~4的位选直连I/O端elseGPIOC->ODR &= ~(1 << (pos + 8)); // 数码管5~6的位选是由PNP三极管驱动if (pos == 0)pos = 5;elsepos--;}
}// 编码开关按键按下中断
void EXTI15_10_IRQHandler(void)
{EXTI->PR |= EXTI_PR_PR12; // 清中断标志TIM3->EGR = TIM_EGR_UG; // 重置定时器3, 使计数值归0
}

【应用】使用STM32单片机定时器的Encoder模式驱动数字旋转编码开关相关推荐

  1. STM32CubeMX配置Encoder模式驱动EC11旋转编码器

    近日考虑DIY1台STM32版的T12焊台,MCU选来选去选中了STM32F070F6P6(CM0内核,TSSOP20封装,48Mhz,32kFlash,6kRam,内置8Mhz晶振和RTC晶振,网上 ...

  2. 步进电机-STM32单片机定时器正弦波输出

    前面的文章介绍了单片机控制步进电机四相四拍.四相八拍的方式.用的是持续电平驱动,这种驱动方式电机的噪音大,震动明显,下面介绍正弦波驱动方式,这种方式能很好的解决噪音和震动问题. 首先需要准备下stm3 ...

  3. STM32和定时器:编码器模式

    在本指南中,我们将介绍如何使用STM32的TIM2读取轴编码器. 我们将介绍以下内容: 什么是编码器 所需部件和连接 配置引脚和定时器以读取编码器 演示代码 1.1 什么是编码器: 旋转编码器,也称为 ...

  4. 单片机驱动android屏幕,STM32单片机对智能手机触摸屏的驱动

    描述 由于智能手机的发展和大屏幕的兴起,触摸屏已经得到了广泛的应用.触摸屏分为两种:电阻触屏 俗称"软屏":电容触屏俗称"硬屏". 电阻触摸屏的屏体部分是一块多 ...

  5. 基于STM32单片机的ILI9341液晶屏驱动protues仿真

    硬件设计 (末尾附文件) 代码设计 #include "lcd.h" #include "string.h" #include "font.h&quo ...

  6. STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

    机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度.位置等信息 STM32的定时器有编码器模式,大大的 ...

  7. 【嵌入式设计】【炒鸡详细】STM32单片机控制机器人程序设计框架解读(不定时更新)

    因为疫情原因,我小机器人的底层单片机代码没人搞了,没人弄了就得我自己上.硕士时候有点儿基础,现在一边儿做一边儿学,争取用一天时间把机器人的底层STM32代码给搞出来. 雨哥最NB的地方就是学东西和做东 ...

  8. HAL库教程10:定时器的PWM模式应用

      本节通过定时器的PWM模式驱动无源蜂鸣器,来演奏一段音乐.本博客在掌机的系列教程中介绍过蜂鸣器的驱动原理,感兴趣的可以参考电子琴 无源蜂鸣器驱动电路   蜂鸣器按照有无震荡源(不是电源),可以分为 ...

  9. 【蓝桥杯嵌入式】【STM32】13_PWM输入捕获模式

    文章目录 前言 1.PWM输入模式 2.硬件设计 3.软件设计 前言   STM32的定时器输入捕获模式可以通过更改输入捕获极性实现PWM的输入捕获,但实际上STM32也包含有非常方便的PWM输入捕获 ...

最新文章

  1. React中setState修改深层对象
  2. Installation error: INSTALL_FAILED_CONTAINER_ERROR
  3. 【转】使用python3的typing模块提高代码健壮性
  4. 微众WeCross 跨链平台(6)UBI通用区块链接口
  5. SpringSecurity权限控制之异常处理方式三
  6. zabbix-agent端自定义监控项(free -m)服务器内存使用率
  7. 关于C语言中的Bool类型变量的一点看法
  8. yaml文件解析:c++篇
  9. Canvas旋转元素
  10. 配置高并发jdbc连接池
  11. 北大青鸟的java课程_北大青鸟Java课程
  12. 数字逻辑_半加器_全加器_全减器_乘法器
  13. 黑域助手连接服务器才能用吗,黑域怎么免root使用?root使用教程
  14. 淘宝宝贝改关键词有影响吗?如何修改?
  15. 京东27亿元收购北京翠宫饭店,徐雷、宋旸的回应很“云淡风轻”
  16. 用java实现一个简单的网络聊天室
  17. MacOS修改Hosts文件
  18. 获取当天的0点0分0秒的日期和23点59分59秒的日期
  19. 决策树一一CART算法(第三部分)
  20. java基础之TreeMap

热门文章

  1. 小玩意:猜数字小游戏(Java GUI)
  2. 串联记忆法,你串上了吗?
  3. 百度搜索留痕推广资源整理如何收录排名的?
  4. c++ 半透明显示窗体
  5. jquery特效代码
  6. 跑分高的服务器cpu游戏性能,【数据分享】暂别跑分, 用游戏对比CPU性能
  7. 我的世界linux联机游戏,MineCraft 我的世界 – PC 端联机服务器搭建 ( Linux )
  8. java中单例_Java中单例
  9. python中单例模式是什么_Python中单例模式总结
  10. Foxit多个高危漏洞通告