当前位置:首页 > 单片机 > 单片机
[导读]/**说明:*PA0:KEY1;PA1:KEY2;*PA2:LED1;PA3:LED2;*PA9:USART1_TX;PA10:USART1_RX*/#include"stm32f10x.h"#include"stm32f10x_rcc.h"#include"stm32f10x_gpio.h"#include"stm32f10x_tim.h"#include"stm32f10x_pwr.h"

/*

*说明:

*PA0:KEY1;PA1:KEY2;

*PA2:LED1;PA3:LED2;

*PA9:USART1_TX;PA10:USART1_RX

*/

#include"stm32f10x.h"

#include"stm32f10x_rcc.h"

#include"stm32f10x_gpio.h"

#include"stm32f10x_tim.h"

#include"stm32f10x_pwr.h"

#include"stm32f10x_exti.h"

#include"system_stm32f10x.h"

#include"misc.h"

voidRCC_Configuration(void);

voidGPIO_Configuration(void);

voidTIM2_Configuration(void);

voiddelay_ms(u16time);

intmain()

{

u8led_fx=1;

u16led_dt=0;

RCC_Configuration();

GPIO_Configuration();

TIM2_Configuration();

while(1)

{

delay_ms(10);

if(led_fx==1)

{

led_dt++;

}else{

led_dt--;

}

if(led_dt>100)led_fx=0;//可以和初始值一样

if(led_dt==0)led_fx=1;

TIM_SetCompare3(TIM2,led_dt);//通道3没有重影像是PA2对应LED1

TIM_SetCompare4(TIM2,led_dt);//通道4没有重影像是PA3对应LED2

}

}

voidRCC_Configuration(void)

{

SystemInit();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

//GPIO_AFIODeInit();和下面相同效果,可以查看源码证明

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

}

voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

//GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE);//端口映射函数

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;//GPIO_Pin_3对应channel3,主函数改为:TIM_SetCompare3

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

voidTIM2_Configuration(void)

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

TIM_OCInitTypeDefTIM_OCInitStructure;

TIM_DeInit(TIM2);

TIM_InternalClockConfig(TIM2);

//定时器初始化

TIM_TimeBaseStructure.TIM_Period=100-1;//初始值是100,2MHz=2000KHz,2MHz/100=0.02MHz,所有周期T=1/0.02MHz=50us,示波器显示周期应该为50us

TIM_TimeBaseStructure.TIM_Prescaler=36-1;//36倍分频,72MHz/36=2MHz

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

//PWM初始化

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse=50;//占空比值是50,所以占空比是:50/100=50%

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;

TIM_OC3Init(TIM2,&TIM_OCInitStructure);

TIM_OCInitStructure.TIM_Pulse=20;

TIM_OC4Init(TIM2,&TIM_OCInitStructure);

//TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);

//TIM_ARRPreloadConfig(TIM2,ENABLE);

TIM_Cmd(TIM2,ENABLE);

TIM_CtrlPWMOutputs(TIM2,ENABLE);

}

voiddelay_ms(u16time)

{

u16i=0;

while(time--)

{

i=12000;

while(i--);

}

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

STM32的内存管理效率直接影响系统性能,以某智能电表项目为例,其数据采集模块每秒需处理12000次ADC采样,传统malloc/free机制导致内存碎片率超过40%,系统运行12小时后出现内存分配失败。通过引入ART内...

关键字: STM32 内存加速器

在工业控制、音频处理等实时性要求严苛的场景中,传统单缓冲DMA模式常因数据覆盖导致系统崩溃。以某自动化产线为例,当PLC以115200bps速率接收Modbus RTU指令时,若采用单缓冲模式,CPU处理延迟超过50μs...

关键字: STM32 多线程DMA

以STM32F103为例,当使用USART1以115200bps速率连续接收数据时,若采用传统轮询方式,每接收1字节需至少5条指令(读DR、写内存、增址、判数、跳转),在72MHz主频下耗时约200ns。表面看CPU仍有...

关键字: STM32 DMA

DMA(Direct Memory Access)技术通过硬件自治机制实现高速数据传输,但实际工程中常因内存对齐、缓存一致性、外设同步等问题导致数据错位。本文以STM32为例,结合STM32CubeMonitor工具,解...

关键字: STM32 DMA传输

工业HMI、医疗影像处理等高性能嵌入式场景中,STM32通过FSMC/FMC接口外扩SRAM已成为突破片内资源限制的关键方案。然而,当总线频率突破50MHz时,信号完整性(SI)问题凸显:某智慧园区监控系统采用STM32...

关键字: STM32 FSMC

在嵌入式存储领域,STM32的SDIO接口凭借其硬件加速能力成为高速SD卡通信的核心方案。随着SD卡规格从Class 10向UHS-I/UHS-II演进,传统48MHz时钟配置已无法满足现代应用对带宽的需求。本文通过硬件...

关键字: STM32 SDIO

在工业自动化、高速数据采集和实时控制领域,USB 3.0凭借其5Gbps的理论带宽和全双工通信能力,成为STM32微控制器扩展高速外设的核心接口。然而,其超高速信号(2.5GHz基频)对PCB设计提出严苛要求,需通过差分...

关键字: USB 3.0 STM32

STM32高速信号处理SRAM作为关键存储组件,其信号完整性直接影响系统稳定性。然而,串扰(Crosstalk)作为高速电路中的“隐形杀手”,常导致SRAM读写错误、数据丢失甚至系统崩溃。本文将从串扰的物理机制出发,结合...

关键字: STM32 高速信号

嵌入式设备,功耗管理是决定产品续航能力与市场竞争力的核心要素。针对STM32高速电路,需通过动态电源管理策略优化SRAM、SD卡和USB等关键外设的功耗,实现毫安级到纳安级的电流控制。本文从硬件架构、时钟配置、唤醒机制和...

关键字: STM32 高速电路 低功耗

STM32高速电路设计,SD卡作为核心存储设备,其数据传输稳定性直接影响系统可靠性。然而,当SDIO接口时钟超过8MHz时,地弹效应(Ground Bounce)会显著增加误码率,导致数据丢失或存储错误。本文通过解析地弹...

关键字: STM32 高速电路
关闭