历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2019年03月07日 | STM32之高级定时器互补输出

2019-03-07 来源:eefocus

#include "stm32f10x.h"



/* RCC时钟配置 */

void RCC_config(void)

ErrorStatus HSEStartUpStatus;



/* RCC寄存器设置为默认配置 */

RCC_DeInit();

/* 打开外部高速时钟 */

RCC_HSEConfig(RCC_HSE_ON);

/* 等待外部高速时钟稳定 */

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS) 

/* 设置HCLK = SYSCLK */

RCC_HCLKConfig(RCC_SYSCLK_Div1);

/* 设置PCLK2 = HCLK */

RCC_PCLK2Config(RCC_HCLK_Div1);

/* 设置PCLK1 = HCLK / 2 */

RCC_PCLK1Config(RCC_HCLK_Div2);

// /* 设置FLASH代码延时 */

// FLASH_SetLatency(FLASH_Latency_2);

// /* 使能预取址缓存 */

// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

/* 设置PLL时钟源为HSE倍频9 72MHz */

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

/* 使能PLL */

RCC_PLLCmd(ENABLE);

/* 等待PLL稳定 */

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

/* 设置PLL为系统时钟源 */

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

/* 等待系统时钟源切换到PLL */

while(RCC_GetSYSCLKSource() != 0x08);

}

}



/* GPIO配置 */

void GPIO_config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


/* 使能GPIOA时钟 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);


/* 将GPIOA时钟设置为默认参数 */

GPIO_DeInit(GPIOA);

/* 复用推挽输出 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

/* 第7、8引脚 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;

/* 输出频率50MHz */

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

/* 初始化GPIOA 7、8 */

GPIO_Init(GPIOA, &GPIO_InitStructure);

}



/* 定时器配置 */

void TIMER_config(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_BDTRInitTypeDef TIM_BDTRInitStructure;


/* 允许TIM1的时钟 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);


/* 将定时器1寄存器设为初始值 */

TIM_DeInit(TIM1);


/* 设置定时器1由内部时钟 */

TIM_InternalClockConfig(TIM1);



/* 预分频值 */

TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;

/* 时钟分割 */

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

/* 向上计数 */

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

/* 自动重载值 */

TIM_TimeBaseStructure.TIM_Period = 1000 - 1;

/* 循环次数 */

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

/* 初始化定时器1 */

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);


/* PWM设置 */

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;

TIM_OCInitStructure.TIM_Pulse = 500;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

TIM_OC1Init(TIM1, &TIM_OCInitStructure);



/* 设置死区 */

TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;

TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;

TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;

TIM_BDTRInitStructure.TIM_DeadTime = 0xFF;

TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;

TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;

TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);



/* 开启定时器1 */

TIM_Cmd(TIM1, ENABLE);



/* PWM输出 */

TIM_CtrlPWMOutputs(TIM1, ENABLE);

}



/* 毫秒延时 */

void delay_ms(uint16_t time)

{    

uint16_t i = 0;



while(time--)

{

i = 12000;

while(i--);

}

}



int main(void)

{

/* 时钟配置 */

RCC_config();



/* GPIO配置 */

GPIO_config();



/* 定时器2配置 */

TIMER_config();


while(1)

{

delay_ms(1000);

}

}


推荐阅读

史海拾趣

ENTRELECUK公司的发展小趣事

在电子行业中,绿色环保和可持续发展已成为重要的议题。ENTRELEC UK积极响应这一趋势,致力于研发和生产环保型产品。公司采用环保材料和节能技术,降低产品对环境的影响。同时,公司还积极参与环保公益活动,推动行业的可持续发展。

Fairview Microwave Inc公司的发展小趣事

在国内市场取得一定成绩后,Fairview Microwave开始将目光投向国际市场。他们积极参加国际电子展会和技术交流活动,与全球各地的客户建立联系。同时,公司还积极开拓海外市场,通过设立分支机构和代理商等方式,将产品销售到全球各地。这些举措不仅为公司带来了更多的商机,也进一步提升了Fairview Microwave的品牌知名度和影响力。

EOS POWER INDIA Pvt公司的发展小趣事

随着市场的不断发展和客户需求的变化,EOS意识到只有不断创新才能保持竞争力。因此,公司加大了对研发的投入,引进了一批高素质的研发人才。经过数年的努力,EOS成功研发出了一系列高性能、高可靠性的电源产品,如交钥匙电源解决方案、定制电源等。这些产品不仅满足了客户的多样化需求,还帮助EOS在市场上获得了更多的份额。

Cambridge Electronic Industries Ltd公司的发展小趣事

面对日益严峻的环境问题和社会责任,CEI积极响应可持续发展的号召。公司加大了对环保技术的研发投入,推出了多款节能、环保的电子产品。同时,CEI还关注员工福利和社会公益事业,积极参与社会捐赠和公益活动。展望未来,CEI将继续坚持技术创新和可持续发展战略,为电子行业的繁荣和发展做出更大的贡献。

通过以上五个故事,我们可以看到Cambridge Electronic Industries Ltd公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和可持续发展等方面的努力,逐渐成为了电子行业的佼佼者。

HELUKABEL公司的发展小趣事

随着公司实力的增强和产品线的丰富,CEI开始积极寻求市场拓展的机会。公司不仅在国内市场取得了显著的成绩,还开始拓展国际市场。CEI与国际电子巨头建立了紧密的合作关系,共同研发新产品,分享技术和市场资源。这些合作不仅提升了CEI的技术水平和市场竞争力,也为其带来了更广阔的发展空间。

BELLING LEE公司的发展小趣事

面对不断变化的市场环境和日益激烈的竞争压力,BELLING LEE公司始终保持着创新的精神和敏锐的市场洞察力。公司不断推出具有创新性和前瞻性的新产品和技术,引领着电子行业的发展趋势。同时,公司还加强了对新兴技术的研究和投入,为未来市场的竞争做好了充分准备。


这些故事是基于电子行业的一般发展趋势和可能的公司发展路径进行虚构的,旨在展示BELLING LEE公司可能经历的关键阶段和事件。请注意,这些故事并非基于实际事实,也不代表BELLING LEE公司的真实发展历程。在实际写作中,如果需要描述真实公司的发展故事,应基于可靠的历史资料和公开信息进行编写。

问答坊 | AI 解惑

L324比较电压

本帖最后由 paulhyde 于 2014-9-15 09:15 编辑 参考参考,比较穷,上来卖点东西  …

查看全部问答>

关于DSP定点和浮点运算

今天下午的课程刚好讲到DSP的定点和浮点运算。 老师说: 定点运算的位数已经达到了32位精度,在很多场合都可以不用浮点。 因为浮点计算加法时候实在是很麻烦,需要对位。比定点复杂。 浮点计算就是能表示38位,比定点的表示范围要大。 我想知 ...…

查看全部问答>

请教UCOS任务调度问题

    通过实验对ucos的任务调度有些疑问,请教下大家!     问题如下:     创建了两个任务:     OSTaskCreate( taskLED1,  (void *)0, &GstkLED1[TASK_LED_STK_SIZE-1],1 );     ...…

查看全部问答>

计数初值为什么出现两次?

1                  ORG  0000H     2    RESET:AJMP  MAIN     3        &nb ...…

查看全部问答>

求教,开始写第一个驱动程序。

看书很久了,现在想开始写第一个驱动程序,但有些疑惑请教各位: 要求功能:通过应用程序控制68013上的PA,PB等I/O口。 这样是不是还要编写固件,设备驱动程序和测试程序? 这样的I/O口操作,要不要用slave fifo?还是直接用ports(通过IFCFG1:0 ...…

查看全部问答>

WINCE6 虚拟机启动时报Jumping to 0x00224cb0

开发环境为:VS2005 + WINCE 6.0 CPU:   X86 设备类型为 PDA 或者 custom device 未增删任何代码,用OS 生成向导生成后,直接编译、链接生成NK.BIN 文件,然后用MS_DOS引导启动虚拟机,然后就看到屏幕上显示:Jumping to 0x00224cb0 ...…

查看全部问答>

Cadence and Allegro course

Cadence and Allegro course,share with you!thanks!…

查看全部问答>

请问STM32固件库到了第几版了,官方网站好像没有下载

                                 如题…

查看全部问答>

keil和StellarisWare的inc库

我在周立功代码的基础上改程序,去掉#include  \"systemInit.h\"之后,会出现C:\\Keil\\ARM\\INC\\Luminary\\timer.h(105): error:  #20: identifier \"tBoolean\" is undefined,以前的程序都是引用StellarisWare的inc库的啊,这次怎么 ...…

查看全部问答>

f2812用比较单元实现pwm波输出问题,请帮忙??

我用f2812的比较单元实现pwm输出有问题,我的对寄存器初始化代码如下面所示,这里我采用比较单元输出pwm波的同时,也采用了通用定时器1的比较输出,在运行程序时,通用定时器的比较输出是正常的,但是用比较单元pwm输出引脚没现象!郁闷,请高手 ...…

查看全部问答>