完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想用定时器1做一个方便的面宽输出,原代码如下:
#define timerRst() TIM1->CNT=0 #define Timerto(X) while(TIM1->CNT { RCC->APB2ENR|=1<<11; //TIM1时钟使能 TIM1->ARR=arr; //设定计数器自动重装,5000为5ms TIM1->SC=psc; //预分频为72(71+1)得到1MH的时钟 TIM1->CR1|=0X01; //使能定时器1 TIM1->BDTR|=0x8000; //TIM1外设主输出使能 } 核心部分: Timer1_Init(200,71); //输出1MHZ的计数时钟 ??????疑惑的地方 当ARR的值不为200时,计数时钟就变成了72MHZ while(1) { TimerRst(); PAout(8)=1; Timerto(200); TimerRst(); PAout(8)=0; Timerto(200); } 也就是说这样下来 我每次输出的脉宽就必须去改定时器的初始化 希望各位能给一个好的解决办法,谢谢了 |
|
相关推荐
6个回答
|
|
可以直接修改 TIM1->ARR的值.而不变动其他的.
|
|
|
|
试过,一旦改ARR的值 那么原来的定时器分频就直接无效了
比如: Timer1_Init(500,71); 初始化还是为1MHZ的时钟 但下面的代码出来的频率为200KHZ左右 也就是说Timerto(200); 这一句当为200/72us时就跳过了 而不是200us while(1) { TimerRst();  Aout(8)=1; Timerto(200); TimerRst();  Aout(8)=0; Timerto(200); } 是不是由于TIM1->CNT的写操作有问题? |
|
|
|
|
|
|
|
我的原目的是 通过TIM1->CNT 来进行比较 比如1US的计数周期 那么Timerto(200); 就应该是到了200us后才执行下面的语句
不是想做PWM输出;我需要的是上一条指令与下一条之间的一个间隔。所以也就不涉及CCRx了 ARR的值是到了ARR然后CNT为0,而TimerRst() TIM1->CNT=0 这一句就是为了CNT为0, TimerRst();  Aout(8)=1; Timerto(200); 这三句的意思是说 计数器1从0开始计数计数到200的时候执行下面的语句,而现在不明白的地方是为什么 计数器的分频会无效??? |
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1437 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1433 浏览 1 评论
838 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
599 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1458 浏览 2 评论
1793浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
537浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
456浏览 3评论
450浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
428浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-16 02:09 , Processed in 0.765758 second(s), Total 86, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号