新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2019-12-17
- 在线时间
- 4 小时
|

楼主 |
发表于 2019-12-22 17:07:01
|
显示全部楼层
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "oled.h"
#include "bmp.h"
#include "timer.h"
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_10)
void TIM3_Init1(u16 arr,u16 psc);
void TIM2_Init1(u16 arr,u16 psc);
void GPIO_KEY();
void EXTIX_Init() ;
u32 flag_times=0; //Âö³å´ÎÊý
int flag_times_1=0; //Âö³å´ÎÊý
int P=20;
int I=10;
int D=10;
extern u32 speed;
u16 curCount ;
/****
主函数
****/
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
delay_init(168);
TIM3_Init1(4399,8999); //5000-1 == 500ms
TIM2_Init1(360,0);
LED_Init();
OLED_Init();
GPIO_SetBits(GPIOF,GPIO_Pin_9);
EXTIX_Init();
while(1)
{
curCount = TIM3->CNT;
OLED_ShowString(0,1,"P=",16);//P
OLED_ShowNum (25,1,P,4,16);
OLED_Refresh();
OLED_ShowString(0,15,"I=",16);
OLED_ShowNum (25,15,I,4,16); //I
OLED_ShowString(0,30,"D=",16);
OLED_ShowNum (25,30,D,4,16); //D
OLED_ShowString(0,45,"V=",16);
OLED_ShowNum (25,45,speed,4,16); //speed
}
}
/***
外部
****/
void TIM3_EncoderInit()
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
//GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //ÊäÈë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE,&GPIO_InitStructure);
// GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_TIM4); //¸´ÓÃ
// GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_TIM4); //¸´ÓÃ
}
//A10ÍⲿÖжÏ
void EXTIX_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); //ʹÄÜSYSCFGʱÖÓ
TIM3_EncoderInit();
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource10); //ÉèÖÃIO¿ÚÓëÖжÏÏßµÄÓ³Éä¹ØÏµ
EXTI_InitTypeDef EXTIX_Init;
NVIC_InitTypeDef NVIC_Init1;
/*ÖжÏÅäÖÃ*/
EXTIX_Init.EXTI_Line =EXTI_Line10; //4ͨµÀ
EXTIX_Init.EXTI_LineCmd =ENABLE;
EXTIX_Init.EXTI_Mode =EXTI_Mode_Interrupt ; //ÖжÏorʼþ
EXTIX_Init.EXTI_Trigger =EXTI_Trigger_Rising; // Rising Falling
EXTI_Init(& EXTIX_Init);
NVIC_Init1.NVIC_IRQChannel=EXTI15_10_IRQn;
NVIC_Init1.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init1.NVIC_IRQChannelPreemptionPriority=1; //ÇÀÕ¼ÓÅÏȼ¶
NVIC_Init1.NVIC_IRQChannelSubPriority=1; //ÏìÓ¦ÓÅÏȼ¶
NVIC_Init(& NVIC_Init1);
}
void EXTI15_10_IRQHandler()
{
flag_times=flag_times+1;
delay_ms(10);
//Èç¹ûÊǰ´¼üµÄ»°
if (KEY0==1 )
D++;
EXTI_ClearITPendingBit(EXTI_Line10);
}
|
|