最近學習了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)
2021-4-24 17:27 上傳
點擊文件名下載附件
|