stm32f103汇编求助
cubemx 生成的freertos代码 在keil ac6下不能编译,有什么解决的方法吗
报错Could not determine GDB version using command: arm-none-eabi-gdb --version
STM32G030F6 ADC+DMA多通道非连续采样无法正常工作?
stm32f103的uac模式对usb接收的数据实时处理
stm32f107vct6配RTL8201例程
STM32F103VGT6 能代替 STM32F103VFT6 吗?
STM32 读取DHT20,跑的官方的例程一直读取失败,初学者,各位大佬能指点一下不
向各位大佬请教一个问题
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
你手动把编码器的计数值设置为500,是指修改TIMx->CNT的值吗? 如果是,
不是很明白你所说的ARR=4000,计数器初始值为500,计数器的计数变为正常的两倍是什么意思?
计数快慢是正常的两倍 还是计数周期变为原来两倍? 另外你的两倍是怎么统计出来的,还是说只是大概感觉?
CNT的确可以手动修改,不过当TIMER对编码信号做向上计数时,如果你给定的初始CNT值比ARR大的话,是会发生
计数器要一直计数到硬件默认满量程,比如16位TIMER的话就是记到0xffff才会调头,不过这个时间段跟正常计数时
间段就未必一定是两倍关系,这点你要注意。
你好是的,我的意思就是CNT设置为500,arr设置为40000,计数速度变为原来的两倍,计数最大值没变,(两倍是我用另一个恩利浦的角度传感器测的),技术速度确实快了两倍,比如应该1s计数增加或减少200,结果增加或减少了400。而且我发现只要计数器计数到4000溢出一次就正常了,我是在编码器停止转动的时候改的CNT的值,而且我发现不在keildebug模式下调试,就正常下进去程序运行的话,不会出现这种情况
这是代码***************************************************/
void ENCODER_Init()
{
//端口配置
RCC->APB2ENR |= 1<<2; /*开启PA时钟*/
GPIOA->CRL &= 0x0000FFFF;
GPIOA->CRL |= 0x44880000; /*PA6和PA7浮空输入*/
GPIOA->ODR |= 1<<4;
GPIOA->ODR |= 1<<5;
//EXTI配置
RCC->APB2ENR |= 1<<0 ; /*使能io复用时钟*/
AFIO->EXTICR[ 1 ] &= 0xFFF0 ;
EXTI->IMR |= 1<<4 ; /*清除原来的设置*/
EXTI->FTSR |= 1<<4 ; /*下降沿触发*/
MY_NVIC_Init( 2, 2, EXTI4_IRQn, 2 ) ;
//定时器3配置
RCC->APB1ENR |= 1<<1 ; /*开启TIM3时钟*/
TIM3->PSC = 1; /*精确度y预分频*/
TIM3->ARR = 39999 ; /*重装值0 65535*/
TIM3->CCMR1 |= 1<<0 ; /*输入端IC1映射到TI1上*/
TIM3->CCMR1 |= 1<<8 ; /*IC2FP2映射到TI2*/
TIM3->CCMR1 |= 3<<4 ; /*输入捕获1滤波器*/
TIM3->SMCR |= 3<<0 ; /*编码器模式3:所有的输入均在上升沿和下降沿有效*/
TIM3->DIER |= 1<<6 ; /*允许捕获中断*/
TIM3->DIER |= 1<<0 ; /*允许更新中断*/
TIM3->CR1 |= 1<<0 ; /*使能定时器3*/
TIM3->CNT = 0;
MY_NVIC_Init( 2, 0, TIM3_IRQn, 2 ) ; /*抢占2,子优先级0,组2*/
}
哦。
可以肯定,CNT是可以修改的,但它肯定没法影响计数速率,因为计数速率完全由硬件决定的,
即你外部输入脉冲的速率没变,实际计数速率就不会变。
你看看是否哪里计算搞误会了。比方:你现在临时调整了计数初值,并非从0一路自然计数过来的,
在做计算时是否注意到这点了。