完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各个大哥好,stm8s003的tim1一直发不了脉冲,程序如下:
void TIM1_init(void) { TIM1_DeInit(); TIM1_TimeBaseInit(0,TIM1_COUNTERMODE_UP,200,0); // TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE); TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_DISABLE, TIM1_OUTPUTNSTATE_DISABLE, 100, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET); TIM1_ARRPreloadConfig(ENABLE); TIM1_OC1PreloadConfig(ENABLE); TIM1_CtrlPWMOutputs(ENABLE); TIM1_Cmd(ENABLE); } 请问有哪里需要改动的,另外,直接写寄存器的也不行 void TIM1_init(void) { TIM1->PSCRH=0;//分频系数为0,定时器时钟为8M/(1+0)=8M TIM1->PSCRL=0; TIM1->ARRH=0x00; TIM1->ARRL=0xC8;//频率调为40k TIM1->CCMR1 =0x78;//通道1配置成比较输出模式,PWM2模式 // TIM1->CCER1 |=0x03;//开启通道1引脚,低电平有效 TIM1->CCER1=0x03; //初始化CCR1,占空比为50%; TIM1->CCR1H=0x00; TIM1->CCR1L=0x64; TIM1->RCR|=0x01; TIM1->EGR=0x01; // TIM1->CNTRH=0; // TIM1->CNTRL=0; TIM1->BKR =0x80; TIM1->CR1 =0x01;//启动定时器1 } |
|
相关推荐
1个回答
|
|
首先,让我们分析一下您提供的代码。这段代码是用于初始化STM8S003的TIM1定时器的。根据您的描述,TIM1定时器无法产生脉冲。我们将逐步检查代码中的各个部分,以找出可能的问题。
1. TIM1_DeInit():这个函数用于将TIM1定时器的所有寄存器重置为默认值。这一步是正确的。 2. TIM1_TimeBaseInit():这个函数用于初始化TIM1定时器的基本时钟和计数器模式。您设置了计数器模式为向上计数(TIM1_COUNTERMODE_UP),预分频器为200,自动重载寄存器值为0。这里的问题是,自动重载寄存器值为0,这意味着定时器的计数周期非常短,可能无法产生可见的脉冲。您需要根据所需的脉冲频率调整自动重载寄存器的值。 3. TIM1_OC1Init():这个函数用于初始化TIM1通道1的输出比较模式。您设置了PWM2模式,输出状态为禁用,输出N状态为禁用,脉冲宽度为100,极性为高,N极性为高,空闲状态为复位,N空闲状态为设置。这里的问题是,输出状态和输出N状态都设置为禁用,这意味着即使定时器开始计数,输出引脚也不会产生任何脉冲。您需要将输出状态设置为启用(TIM1_OUTPUTSTATE_ENABLE)。 4. TIM1_ARRPreloadConfig(ENABLE):这个函数用于启用自动重载寄存器的预装载功能。这一步是正确的。 综上所述,要解决您的问题,您需要做以下更改: 1. 调整TIM1_TimeBaseInit()中的自动重载寄存器值,以获得所需的脉冲频率。 2. 修改TIM1_OC1Init()中的输出状态为启用(TIM1_OUTPUTSTATE_ENABLE)。 以下是修改后的代码示例: ```c void TIM1_init(void) { TIM1_DeInit(); TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 10000, 0); // 假设您想要1kHz的脉冲频率,自动重载寄存器值应为10000 TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 5000, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET); TIM1_ARRPreloadConfig(ENABLE); } ``` 请注意,您需要根据您的具体需求调整自动重载寄存器值和脉冲宽度。希望这能帮助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1885 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1663 浏览 1 评论
1149 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
763 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1965浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
790浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
616浏览 3评论
631浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
594浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 16:31 , Processed in 0.818569 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号