STM32之高级定时器互补输出

发布者:茶叶侠最新更新时间:2019-03-07 来源: eefocus关键字:STM32  高级定时器  互补输出 手机看文章 扫描二维码
随时随地手机看文章

#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);

}

}


关键字:STM32  高级定时器  互补输出 引用地址:STM32之高级定时器互补输出

上一篇:STM32之CAN总线原理
下一篇:STM32之SPI从机DMA例程

推荐阅读最新更新时间:2024-03-16 16:25

stm32实用篇5:HAL库 DHT11 驱动
DHT11是很常用的温湿度传感器,时序也比较简单,如下所示: 直接给出HAL库的驱动: 1 微秒级延时函数 HAL库并没有直接的微秒级延时函数,下面是自己实现的微秒堵塞延时函数(使用定时器TIM3); /** * @brief 微秒级延时 */ void bsp_delay_us(uint16_t us) { __HAL_TIM_SET_COUNTER(&htim3, 0); HAL_TIM_Base_Start(&htim3); while (__HAL_TIM_GET_COUNTER(&htim3) != us); HAL_TIM_Base_Stop(
[单片机]
<font color='red'>stm32</font>实用篇5:HAL库 DHT11 驱动
stm32 TFTLCD驱动原理(二)
FSMC简介: (1) 在大容量, 100 脚以上的 STM32F103 芯片都带有 FSMC 接口,硬石开发板 F1采用的主芯片为 STM32F103ZET6, 是带有 FSMC 接口的。 FSMC(灵活的静态存储器控制器),之所以称为灵活,是由于通过对特殊公的寄存器的设置, FSMC 能够根据不同个外部存储器列席,发出相应的数据/地址 /控制信号类型以匹配信号的速度,使得 STM32 系列微控制器不仅能够应用各种不同的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同 类型的静态存储器, 满足系统设计对存储容量、产品体积以及成本的综合要求。 从上图中可以看到, STM32 的 FSMC 将外部设备分为
[单片机]
<font color='red'>stm32</font> TFTLCD驱动原理(二)
STM32-HAL
为了使用STM32 cubeMX工具快速完成设计,打算从StdPeriph_Lib换成HAL_Driver。初使用cubeMX,感觉就像从DOS时代迈入图形界面时代,而且对STM的所有系列有最好的支持。 在HAL库中: 常用功能: HAL_Delay() //毫秒延时,精度还是可以的。 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);//GPIO_PIN_RESET而不是RESET了。 时钟配置: 如果懂得STM32的架构,配置起来简直不能太简单,但好像有个bug就是配置为HSI时钟无法DEBUG调试。 串口中断: 通过HA
[单片机]
STM32-HAL
STM32 TIM重映射
复用功能 没有重映射 部分重映射 完全重映射 TIM3_CH1 PA6 PB4 PC6 CH2 PA7 PB5 PC7 CH3 PB0 PB0 PC8 CH4 PB1 PB1 PC9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
[单片机]
STM32通用定时器TIM实现PWM波配置步骤
//1、开启定时器时钟和需要用到的IO口 void Clock_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);//因为准备把PB5口作为输出端口,所以接下来AFIO使能,如果使用默认的PA7 输 //出则不用使能AFIO,但需要使能GPIOA } //2、IO口并重映射TIM3 void GPIO_Out_Init(void) { GPIO_InitTypeDef GPIO_Init
[单片机]
stm32重启调试笔记
#stm32重启调试笔记 本文章主要解决在使用stm32+ucos进行嵌入式软件开发中遇到的系统重启现象查找与解决。 1 、重启原因 系统重启又多种可能:1、看门狗中断;2、内存泄漏;3、软件重启。 首先看一下stm32的手册关于系统重启的状态寄存器,其中详细的记录了几个系统重启的原因(低功耗复位标志、窗口看门狗复位标志、) 寄存器详细信息: 查看寄存器值 a:通过debug查看,在代码进入main函数时加入断电,通过查看RCC寄存器值可以明了的查看相关状态 b:在查看之后应该清除中断信息,这样下次重启时才能知道重启原因。加入下面一条语句。 /*打印中断标志字*/ void print_reboot
[单片机]
<font color='red'>stm32</font>重启调试笔记
STM32流水灯实验编程
首先,在上一节的模板基础上建立一个新的Keil工程,取名为LED。打开main.c函数,可以直接在这里写代码,当然也可以重新建立.c文件,这里我们直接在main文件中写程序。第一步,也是最重要的一步就是配置作为输出的IO口,代码如下: GPIO_InitTypeDef GPIO_Structure; //定义GPIO结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //使能PEIO口的时钟 GPIO_Structure.GPIO_Pin = GPIO_Pin_9; //结构体引脚为PE9 GPIO_Structure.GPIO_Mode = GPIO_
[单片机]
<font color='red'>STM32</font>流水灯实验编程
基于STM32的双路信号源及配置平台设计
随着在雷达探测、仪表测量、化学分析等领域研究的不断深入,不仅要求定性的完成目标检测,更加需要往高精度、高分辨率成像的方向发展。一方面,产生频率、幅度灵活可控,尤其是低相位噪声、低杂散的频率源对许多仪器设备起着关键作用。另一方面,电子元器件实际性能参数并非理想以及来存在自外部内部的干扰,大量的误差因素会严重影响系统的准确性。双路参数可调的信号源可有效地对系统误差、信号通道间不平衡进行较调,并且可以产生严格正交或相关的信号,这在弱信号检测中发挥重要作用。为此本文采用双通道DDS方法,以STM32为控制器,完成了一种高分辨率灵活可调的双路信号源电路设计。 1 DDS原理及系统方案 1.1 DDS工作原理 直接数字频率合成(DDS)是一种以
[单片机]
基于<font color='red'>STM32</font>的双路信号源及配置平台设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved