最近学习了stm32,就想用它来控制舵机,然后写下这篇文章分享给大家,如果有理解不到位的地方欢迎大家指正。(我使用的是stm32f103rc型号的开发板,其实也可以用在stm32f103c8上面)
按键控制舵机主要就是通过按键中断来进行pwm舵机函数从而进行控制舵机
单片机源程序如下:
- #include "key.h"
- #include "delay.h"
- void KEY_Init(void)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PA15
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
- GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA15
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//PC5
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
- GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉
- GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
-
- }
- //按键处理函数
- //返回按键值
- //mode:0,不支持连续按;1,支持连续按;
- //返回值:
- //0,没有任何按键按下
- //KEY0_PRES,KEY0按下
- //KEY1_PRES,KEY1按下
- //WKUP_PRES,WK_UP按下
- //注意此函数有响应优先级,KEY0>KEY1>WK_UP!!
- u8 KEY_Scan(u8 mode)
- {
- static u8 key_up=1;//按键按松开标志
- if(mode)key_up=1; //支持连按
- if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
- {
- delay_ms(10);//去抖动
- key_up=0;
- if(KEY0==0)return KEY0_PRES;
- else if(KEY1==0)return KEY1_PRES;
- else if(WK_UP==1)return WKUP_PRES;
- }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;
- return 0;// 无按键按下
- }
复制代码 这里因为喔只有一个sg90所以我只在WK_UP按键的中断函数中加入了pwm舵机函数,其它的按键大家可以加入其它的外设来达到按键控制外设的目的。因为篇幅的限制,大家可以自行下载源码查看。
51黑下载:
按键控制舵机.7z
(186.19 KB, 下载次数: 109)
|