新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2016-4-1
- 在线时间
- 4 小时
|
void send_gpio_2(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA及功能复用IO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//使能TIM2时钟
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//I/O时钟为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);//根据上面指定参数初始化GPIO结构体
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//I/O时钟为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);//根据上面指定参数初始化GPIO结构体
}
void pwm(uint32_t t,uint32_t w) /* 6000/3000/5760/2880 */
{
TIM_TimeBaseInitTypeDef TIM1_TimeBaseStructure;
TIM_OCInitTypeDef TIM1_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM1_TimeBaseStructure.TIM_Period =t-1;//计数值为1000
TIM1_TimeBaseStructure.TIM_Prescaler = 1-1;//3分频
TIM1_TimeBaseStructure.TIM_ClockDivision = 0;//采样分频0
TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM1, &TIM1_TimeBaseStructure);
TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//定时器配置为PWM1模式
TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM输出比较极性高
TIM1_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;
TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//通道1输出使能
TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM1_OCInitStructure.TIM_Pulse =w;//脉宽值为200
TIM_OC1Init(TIM1,&TIM1_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化TIM1
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR1上的预装载寄存器
TIM_ARRPreloadConfig(TIM1, ENABLE);//使能TIM2在ARR上的预装载寄存器
// TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);//预先清除所有中断位
TIM_Cmd(TIM1, ENABLE);//使能定时器2
TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
void dwin(void)
{/*********************************************************************
定义结构体
*********************************************************************/
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
/*********************************************************************
使能时钟
*********************************************************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/*********************************************************************
IO配置及其初始化
*********************************************************************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*********************************************************************
串口配置
*********************************************************************/
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_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(USART2,&USART_ClockInitStructure);
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_Cmd(USART2, ENABLE);
/**********************END**************************/
}
void NVIC_dwin_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //采用组别2
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//配置串口中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//占先式优先级设置为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副优先级设置为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能
NVIC_Init(&NVIC_InitStructure);//中断初始化
}
int fputc(int ch, FILE *f) /* printf重新定向 */
{
/* Write a character to the USART */
USART_SendData(USART2, (u8) ch);
/* Loop until the end of transmission */
while(!(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == SET))
{
}
return ch;
}
|
|