久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3474|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32F103 倍頻 72M 8路舵機控制源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:362385 發(fā)表于 2018-6-30 18:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
做的一個舵機,很棒,用處很大

單片機源程序如下:
  1. /*
  2.         單片機:STM32F103RCT6/STM32F103C8T6  倍頻 72M 8路舵機控制
  3.         舵機IO PA0~PA3 PB3~PB6
  4. */
  5. #include "stm32f10x_conf.h"
  6. #define tb_interrupt_open() {__enable_irq();}        //總中斷打開
  7. void rcc_init(void);                                                        //主頻設(shè)置
  8. void delay_ms(unsigned int t);                //毫秒級別延時
  9. void dj_io_init(void);                                //舵機 IO 口初始化
  10. void dj_io_set(u8 index, u8 level);        //舵機 IO 口高低電平設(shè)置
  11. void TIM2_Int_Init(u16 arr,u16 psc);//舵機 定時器初始化
  12. void gpioA_pin_set(unsigned char pin, unsigned char level);
  13. void gpioB_pin_set(unsigned char pin, unsigned char level);

  14. //舵機脈沖數(shù)組
  15. int duoji_pulse[8] = {1500,1500,1500,1500,1500,1500,1500,1500} , i;

  16. int main(void) {       
  17.         rcc_init();
  18.         dj_io_init();
  19.         TIM2_Int_Init(20000,71);
  20.         tb_interrupt_open();
  21.         while(1) {       
  22.                 for(i=0;i<8;i++) {
  23.                         duoji_pulse[i] = 1000;//循環(huán)把8個舵機位置設(shè)定到1000
  24.                 }
  25.                 delay_ms(1000);
  26.                 for(i=0;i<8;i++) {
  27.                         duoji_pulse[i] = 2000;//循環(huán)把8個舵機位置設(shè)定到2000
  28.                 }
  29.                 delay_ms(1000);       
  30.         }
  31. }

  32. void rcc_init(void) {
  33.         ErrorStatus HSEStartUpStatus;
  34.         RCC_DeInit();
  35.         RCC_HSEConfig(RCC_HSE_ON);
  36.         HSEStartUpStatus = RCC_WaitForHSEStartUp();
  37.         while(HSEStartUpStatus == ERROR);
  38.         RCC_HCLKConfig(RCC_SYSCLK_Div1);//SYSCLK
  39.         RCC_PCLK1Config(RCC_HCLK_Div2);//APB1  MAX = 36M
  40.         RCC_PCLK2Config(RCC_HCLK_Div1);//APB2  MAX = 72M
  41.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  42.         RCC_PLLCmd(ENABLE);
  43.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  44.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  45.         while(RCC_GetSYSCLKSource() != 0x08);
  46. }


  47. void delay_ms(unsigned int t) {
  48.         int t1;
  49.         while(t--) {
  50.                 t1 = 7200;
  51.                 while(t1--);
  52.         }
  53. }
  54. void dj_io_init(void)  {
  55.         GPIO_InitTypeDef GPIO_InitStructure;       

  56.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
  57.        
  58.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  59.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  60.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  61.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  62.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6 | GPIO_Pin_14;
  63.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  64.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  65.         GPIO_Init(GPIOB, &GPIO_InitStructure);               
  66. }

  67. void dj_io_set(u8 index, u8 level) {
  68.         switch(index) {
  69.                 case 0:gpioA_pin_set(0, level);break;
  70.                 case 1:gpioA_pin_set(1, level);break;
  71.                 case 2:gpioA_pin_set(2, level);break;
  72.                 case 3:gpioA_pin_set(3, level);break;
  73.                 case 4:gpioB_pin_set(3, level);break;
  74.                 case 5:gpioB_pin_set(4, level);break;
  75.                 case 6:gpioB_pin_set(5, level);break;
  76.                 case 7:gpioB_pin_set(6, level);break;
  77.                 default:break;
  78.         }
  79. }

  80. void gpioA_pin_set(unsigned char pin, unsigned char level) {
  81.         if(level) {
  82.                 GPIO_SetBits(GPIOA,1 << pin);
  83.         } else {
  84.                 GPIO_ResetBits(GPIOA,1 << pin);
  85.         }
  86. }

  87. void gpioB_pin_set(unsigned char pin, unsigned char level) {
  88.         if(level) {
  89.                 GPIO_SetBits(GPIOB,1 << pin);
  90.         } else {
  91.                 GPIO_ResetBits(GPIOB,1 << pin);
  92.         }
  93. }


  94. void TIM2_Int_Init(u16 arr,u16 psc) {
  95.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  96.         NVIC_InitTypeDef NVIC_InitStructure;
  97.        
  98.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //①時鐘 TIM2 使能       
  99.         //定時器 TIM2 初始化
  100.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置自動重裝載寄存器周期的值
  101.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置時鐘頻率除數(shù)的預(yù)分頻值
  102.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時鐘分割
  103.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上計數(shù)
  104.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);  //②初始化 TIM2
  105.         TIM_ARRPreloadConfig(TIM2, DISABLE);
  106.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );  //③允許更新中斷
  107.        
  108.         //中斷優(yōu)先級 NVIC 設(shè)置
  109.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2 中斷
  110.         //NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000);
  111.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占優(yōu)先級 0 級
  112.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //從優(yōu)先級 2 級
  113.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //IRQ 通道被使能
  114.         NVIC_Init(&NVIC_InitStructure);  //④初始化 NVIC 寄存器
  115.         TIM_Cmd(TIM2, ENABLE);  //⑤使能 TIM2
  116. }

  117. void TIM2_IRQHandler(void) {
  118.         static u8 flag = 0;
  119.         static u8 duoji_index1 = 0;
  120.         int temp;
  121.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查 TIM2 更新中斷發(fā)生與否
  122.         {
  123.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除 TIM2 更新中斷標(biāo)志
  124.                
  125.                 if(duoji_index1 == 8) {
  126. ……………………

  127. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
32單個舵機控制源碼.rar (1.22 MB, 下載次數(shù): 36)


評分

參與人數(shù) 1黑幣 +5 收起 理由
yanyuwei + 5 絕世好帖!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级一区二区 | 毛片aaa| 国产视频一区二区在线观看 | 色偷偷噜噜噜亚洲男人 | 激情五月婷婷 | 伊人综合影院 | 欧美日韩亚洲视频 | 一区二区三区视频在线 | 三上悠亚激情av一区二区三区 | 人人爽人人爽人人片av | 午夜影院免费 | 精品一区二区三区视频 | 久久久久久久影院 | 国产精品黄 | av手机在线观看 | 久久激情小说 | 免费看毛片网站 | 午夜性视频 | 国产特级淫片免费看 | 成人免费看片视频 | 婷婷色av| 久久免费小视频 | 日日拍夜夜拍 | 福利片在线观看 | hdxxxxhd100%| 一区二区三区在线免费 | 91导航| 一级片欧美 | 动漫av在线 | 亚洲免费成人 | 91免费视频| 亚洲高清中文字幕 | 在线观看一区 | 特黄aaaaaaaaa真人毛片 | 激情综合婷婷 | av高清在线 | 久久久激情 | 精品国产aⅴ麻豆 | 国产91清纯白嫩初高中在线观看 | 国产一级生活片 | 日本精品视频 |