0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32编程疑难杂症

edager 来源:edager 作者:edager 2024-03-28 23:29 次阅读

最近遇到一个奇怪的问题:

如果用一个程序单独用定时器内中断每隔1s点亮LED,此时LED亮度是正常的,单独的呼吸灯程序LED亮度也正常

后来另外写了一个程序将上面定时器内部中断每隔1s点亮LED的功能跟PWM呼吸灯的程序合并在一起后呼吸灯亮度就变的很暗了,但是呼吸灯是能够正常呼吸的

以上是什么原因导致的?

wKgZomYFjISAZjHtAABaUIIZD3M043.pngwKgZomYFjIWAWLhnAATGfZy2P1c906.png

程序如下:

#include "stm32f10x.h" // Device header
#include "Led.h"
#include "Timer.h"
#include "PWM.h"
#include "Delay.h"
#include "SysTick.h"

uint16_t i;

int main(void)
{
// SysTick_Init(72);
Timer_Init();
LED_Init();
PWM_Init(100,720); //1000Hz
while(1)
{
for(i=0; i<=100; i++)
{
PWM_SetCompare1(i);
PWM_SetCompare2(i);
Delay_ms(10);
}

for(i=0; i<=100; i++)
{
PWM_SetCompare1(100-i);
PWM_SetCompare2(100-i);
Delay_ms(10);
}
}
}

#include "stm32f10x.h" // Device header


void PWM_Init(uint16_t Per, uint16_t Psc)
{
//ÍâÉè²ÎÊý½á¹¹Ìå
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;

//ÍâÉèʱÖÓ¿ªÆô
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

//ÖØÓ³ÉäÒý½ÅPA6µ½PC6
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

//GPIO½á¹¹Ìå²ÎÊýÉèÖÃ
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);

//Ñ¡Ôñʱ»ùµ¥ÔªµÄʱÖÓÔ´
TIM_InternalClockConfig(TIM3);

//¶¨Ê±Æ÷ʱ»ù½á¹¹Ìå²ÎÊýÉèÖÃ
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = Per-1; //ARR Ô¤ÖØ×°ÔØÖµ
TIM_TimeBaseInitStruct.TIM_Prescaler = Psc-1; //PSC Ô¤·ÖƵϵÊý
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);

//Êä³ö±È½Ï½á¹¹Ìå²ÎÊýÉèÖÃ
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse = 0; //CCR ¼ÆÊýÆ÷
TIM_OC1Init(TIM3, &TIM_OCInitStruct);
TIM_OC2Init(TIM3, &TIM_OCInitStruct);

// TIM_ARRPreloadConfig(TIM3, ENABLE);
// TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

//ʹÄܶ¨Ê±Æ÷
TIM_Cmd(TIM3, ENABLE);

}


//ÉèÖÃCCR,¸Ä±äPWMÕ¼¿Õ±È
void PWM_SetCompare1(uint16_t Compare)
{
TIM_SetCompare1(TIM3, Compare);
}


void PWM_SetCompare2(uint16_t Compare)
{
TIM_SetCompare2(TIM3, Compare);
}

//ÉèÖÃÔ¤·ÖƵֵ,¸Ä±äPWMƵÂÊ
void PWM_Prescaler(uint16_t Prescaler)
{
TIM_PrescalerConfig(TIM3, Prescaler, TIM_PSCReloadMode_Immediate);
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22450

    浏览量

    645892
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209930
  • STM32
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348809
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92406
收藏 人收藏

    评论

    相关推荐

    STM32疑难杂症之一:Printf的使用

    一、Printf简介Printf是一个标准的C库API,用来打印信息显示的。Printf的底层输出调用,在windows环境下是fputc函数,在GNUC环境下是__io_putchar函数。Printf主要做两件事:第一件是将参数字符串以及可变参数进行解析,格式化成一串字符串。第二件事就是将格式化的字符串一个字节一个字节的输出出去(至于以什么样的方式输出那
    的头像 发表于 04-02 08:09 203次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>疑难杂症</b>之一:Printf的使用

    AD9164散问题如何解决?

    出现一个与基带信号相关的散点幅度-50dBm左右,影响了射频输出的Sfdr。具体现象: 输出2.2ghz点频时,散点在2.6GHz 输出2.3ghz点频时,散在2.5ghz 输出2.4ghz点频
    发表于 12-04 07:39

    罗盘为什么会出现Bad Compass Health

    pixhawk飞控疑难杂症解决方案
    发表于 11-27 09:38 0次下载

    使用USART实现STM32F0xx应用编程

    电子发烧友网站提供《使用USART实现STM32F0xx应用编程 .pdf》资料免费下载
    发表于 09-21 14:43 0次下载
    使用USART实现<b class='flag-5'>STM32</b>F0xx应用<b class='flag-5'>编程</b>

    STM32F10xxx闪存编程手册

    电子发烧友网站提供《STM32F10xxx闪存编程手册.pdf》资料免费下载
    发表于 09-18 10:33 11次下载
    <b class='flag-5'>STM32</b>F10xxx闪存<b class='flag-5'>编程</b>手册

    gd32和stm32编程区别

    gd32和stm32编程区别 GD32和STM32是目前市场上比较流行的两种芯片,它们都具有高性能、低功耗和丰富的外设等特点,因此得到了广泛的应用。但是,GD32和STM32
    的头像 发表于 08-16 11:32 5739次阅读

    ch32和stm32编程有区别吗?

    ch32和stm32编程有区别吗? STM32是一个系列的单片机,其核心中央处理单元(CPU)使用ARM Cortex-M内核。因此,STM32编程
    的头像 发表于 08-16 11:15 925次阅读

    变频器疑难杂症,非寻常工程师能破解!#硬声创作季

    变频器
    或许
    发布于 :2023年07月25日 15:01:55

    Linux问题故障定位大全

    有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。
    的头像 发表于 07-10 10:27 336次阅读
    Linux问题故障定位大全

    开关电源方案设计 开关电源疑难杂症解决 两段式PFC

    电源
    YS YYDS
    发布于 :2023年06月24日 23:33:56

    三台疑难杂症 焊机维修

    电工基础
    YS YYDS
    发布于 :2023年06月21日 22:41:31

    STM32F10xxx闪存编程参考手册(中文)

    编程手册介绍了如何烧写STM32F101xx、STM32F102xx和STM32F103xx微控制器的闪存存 储器。为方便起见,在本文中除特别说明外,统称它们为
    发表于 06-19 17:08 29次下载

    21个最常见晶振应用疑难问题及解答

    21个最常见晶振应用疑难问题及解答
    的头像 发表于 06-10 16:56 980次阅读

    STM32单片机编程方式及工作原理

    STM32单片机编程可以使用多种不同的编程语言和工具,下面是一些常用的编程方式:   C语言编程:C语言是
    的头像 发表于 05-31 17:22 5453次阅读