STM32+
PWM +
minios@yeah.net
GPIO.c
#include "STM32Lib\\stm32f10x.h"
#include "hal.h"
/**********************************************************************
*********
* Function Name : GPIO_Configuration
* PD3,PD4,PD5,PD6
* PB0,5,8,9; PC5,7; PD7 ;PA8 LED
***********************************************************************
********/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* CLOCK, GPIO .
STM32 ,,,
STM32 ,*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/* PC8 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* PC9 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
hal.h
#ifndef HAL_H
#define HAL_H
//
extern void ChipHalInit(void);
extern void ChipOutHalInit(void);
//
#define GET_LEFT() (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))
#define GET_RIGHT() (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9))
extern void USART1_Putc(u8 c);
extern void USART_Configuration(void);
extern void USART1_Puts(char * str);
#endif
TIM.c
#include "STM32Lib\\stm32f10x.h"
void Tim1_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* PA8 (PWM) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_DeInit(TIM1);
/*TIM1 */
TIM_TimeBaseStructure.TIM_Prescaler = 72; //(
)72M/72=1000K
TIM_TimeBaseStructure.TIM_CounterMode =
TIM_CounterMode_Up; //
TIM_TimeBaseStructure.TIM_Period = 2000; //
1000k/2000=500hz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
/* Channel 1 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM
2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //
TIM_OCInitStructure.TIM_OutputNState =
TIM_OutputNState_Disable;//
TIM_OCInitStructure.TIM_Pulse = 300; //
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure); // 1
/* TIM1 counter enable */
TIM_Cmd(TIM1,ENABLE);
/* TIM1 Main Output Enable */
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
// 1
void SetT1Pwm1(u16 pulse)
{
TIM1->CCR1=pulse;
}
main.c
/************************************************************
**:PWM
**: PA8 PWM ,
*************************************************************/
#include "STM32Lib\\stm32f10x.h"
#include "hal.h"
#define SIZE 0
u8 table[11]={"0123456789 "};
char buffer[10]={"0000000000"};
void Delay(u16 n);
void d_2_char(u32 x)
{
buffer[SIZE+0]=table[x%10000000000/100000];
buffer[SIZE+1]=table[x%1000000000/100000];
buffer[SIZE+2]=table[x%100000000/100000];
buffer[SIZE+3]=table[x%10000000/10000];
buffer[SIZE+4]=table[x%1000000/10000];
buffer[SIZE+5]=table[x%100000/10000];
buffer[SIZE+6]=table[x%10000/1000];
buffer[SIZE+7]=table[x%1000/100];
buffer[SIZE+8]=table[x%100/10];
buffer[SIZE+9]=table[x%10];
}
//
void Delay(u16 speed)
{
u16 i;
while(speed!=0)
{
speed--;
for(i=0;i<400;i++);
}
}
extern void SetT1Pwm1(u16 pulse);
int main(void)
{
u16 pulse=300;
ChipHalInit(); //
ChipOutHalInit(); //
for(;;)
{
if(GET_LEFT()==0)
{
while(GET_LEFT()==0);
if(pulse<=2000)
{
pulse+=30;
// SetT1Pwm1(pulse);
}
else
{
pulse=300;
}
d_2_char(pulse);
USART1_Puts(buffer);
USART1_Puts("\r\n");
}
if(GET_RIGHT()==0)
{
while(GET_RIGHT()==0);
if(pulse<=2000)
{
pulse-=60;
}
else
{
pulse=1800;
}
d_2_char(pulse);
USART1_Puts(buffer);
USART1_Puts("\r\n");
}
SetT1Pwm1(pulse);
}
}
不