stm32 pwm控制的跑马灯视频(视频有点长):
	
	
	
PWM控制呼吸灯的代码:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32_eval.h"
#include 
#define VREF 3.3
GPIO_InitTypeDef   GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
void RCC_Configuration(void)
{/*
  RCC_DeInit();
    
  RCC_HSICmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
  
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  
  RCC_HSEConfig(RCC_HSE_OFF);
  RCC_LSEConfig(RCC_LSE_OFF);
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz
  RCC_PLLCmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  RCC_PCLK2Config(RCC_HCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  while(RCC_GetSYSCLKSource() != 0x08);
*/
	SystemInit();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
	GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
	  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
} 
void USART_int(long BaudRate)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    /* PA10 USART1_Rx  */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
  USART_InitStructure.USART_BaudRate = BaudRate;//??????
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;//???????8bit
  USART_InitStructure.USART_StopBits = USART_StopBits_1;//????1
  USART_InitStructure.USART_Parity = USART_Parity_No;//????
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//??????none
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//??????????
	USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;     
    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;      
    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;      
    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
    USART_ClockInit(USART1, &USART_ClockInitStructure);
  USART_Init(USART1, &USART_InitStructure);
  USART_Cmd(USART1, ENABLE);
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
 USART_Cmd(USART1, ENABLE);
}
void PWM_Config()
{uint16_t PrescalerValue = 0;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
	/* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  /* GPIOA  enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO  , ENABLE);
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
		TIM_Cmd(TIM2, ENABLE);
	  /* Compute the prescaler value */
  PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 0x07FF;
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  /* PWM1 Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0xFFFF;
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);
	/* PWM1 Mode configuration: Channel3 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0xFFFF;
  TIM_OC3Init(TIM2, &TIM_OCInitStructure);
	/* PWM1 Mode configuration: Channel4 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0xFFFF;
  TIM_OC4Init(TIM2, &TIM_OCInitStructure);
  TIM_ARRPreloadConfig(TIM2, ENABLE);
}
void delay_us(u32 n)  
{  
    u8 j;  
    while(n--)  
    for(j=0;j<10;j++);  
}  
void  delay_ms(u32 n)  
{  
    while(n--)  
    delay_us(1000);  
}  
void PWM_TEST()
{ unsigned int temp0=0,temp1=0,temp2=0;
	printf("PWM-RGB TEST......\r\n");
	while(1)
	{
		  
		
		for(temp0=0;temp0<2047;temp0++)
		{
		TIM_SetCompare2(TIM2, temp0);
			delay_us(1000);
		}
	if (temp0>=2047)
	{
		delay_ms(2000);
		temp0=0;
	
  }
	
	for(temp1=1;temp1<2047;temp1++)
		{
		TIM_SetCompare3(TIM2, temp1);
			delay_us(1000);
		}
	if (temp1>=2047)
	{
		delay_ms(2000);
		temp1=0;
	
  }
		for(temp2=0;temp2<2047;temp2++)
		{
		TIM_SetCompare4(TIM2, temp2);
			delay_us(1000);
		}
	if (temp2>=2047)
	{
		delay_ms(2000);
		temp2=0;
	
  }
		
	for(temp0=0,temp1=0;temp0<2047||temp1<2047;temp0++,temp1++)
		{
		  TIM_SetCompare2(TIM2, temp0);
				TIM_SetCompare3(TIM2, temp1);
			delay_us(1000);}
	if (temp0>=2047)
	{
		delay_ms(2000);
		temp0=0;
  }
	if (temp1>=2047)
	{
		delay_ms(2000);
		temp1=0;
	
  }
	
	for(temp0=0,temp2=0;temp0<2047||temp2<2047;temp0++,temp2++)
		{
		  TIM_SetCompare2(TIM2, temp0);
				TIM_SetCompare4(TIM2, temp2);
			delay_us(1000);}
	if (temp0>=2047)
	{
		delay_ms(2000);
		temp0=0;
  }
	if (temp2>=2047)
	{
		delay_ms(2000);
		temp2=0;
	
  }
	for(temp1=0,temp2=0;temp1<2047||temp2<2047;temp1++,temp2++)
		{
		  TIM_SetCompare3(TIM2, temp1);
				TIM_SetCompare4(TIM2, temp2);
			delay_us(1000);}
	if (temp1>=2047)
	{
		delay_ms(2000);
		temp1=0;
  }
	if (temp2>=2047)
	{
		delay_ms(2000);
		temp2=0;
	
  }
	
	for(temp0=0,temp1=0,temp2=0;temp0<2047||temp1<2047||temp2<2047;temp0++,temp1++,temp2++)
		{
		  TIM_SetCompare3(TIM2, temp1);
			 TIM_SetCompare2(TIM2, temp0);
				TIM_SetCompare4(TIM2, temp2);
			delay_us(1000);}
			if (temp0>=2047)
	{
		delay_ms(2000);
		temp0=0;
  }
	if (temp1>=2047)
	{
		delay_ms(2000);
		temp1=0;
  }
	if (temp2>=2047)
	{
		delay_ms(2000);
		temp2=0;
	
  }
  
 }
}
int main(void)
{
		
 
  RCC_Configuration();
USART_int(115200);
	
	printf(" config done...\r\n");
	PWM_Config();
	delay_ms(1000);
	while(1)
	{
		PWM_TEST();
	}
}
#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ 
 
  while (1)
  {
  }
}
#endif
/**
  * @}
  */ 
/**
  * @}
  */ 
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
  
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(EVAL_COM1, (uint8_t) ch);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
  {}
  return ch;
}
#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ 
 
  while (1)
  {
  }
}
#endif
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
	
	

 
					
				 
			
			
			
						
			 
					
				 
 
 
 
 
 
 
 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

