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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3374|回復(fù): 0
收起左側(cè)

STM32F103 倍頻 72M 8路舵機(jī)控制源碼

[復(fù)制鏈接]
ID:362385 發(fā)表于 2018-6-30 18:14 | 顯示全部樓層 |閱讀模式
做的一個(gè)舵機(jī),很棒,用處很大

單片機(jī)源程序如下:
  1. /*
  2.         單片機(jī):STM32F103RCT6/STM32F103C8T6  倍頻 72M 8路舵機(jī)控制
  3.         舵機(jī)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);                //毫秒級(jí)別延時(shí)
  9. void dj_io_init(void);                                //舵機(jī) IO 口初始化
  10. void dj_io_set(u8 index, u8 level);        //舵機(jī) IO 口高低電平設(shè)置
  11. void TIM2_Int_Init(u16 arr,u16 psc);//舵機(jī) 定時(shí)器初始化
  12. void gpioA_pin_set(unsigned char pin, unsigned char level);
  13. void gpioB_pin_set(unsigned char pin, unsigned char level);

  14. //舵機(jī)脈沖數(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個(gè)舵機(jī)位置設(shè)定到1000
  24.                 }
  25.                 delay_ms(1000);
  26.                 for(i=0;i<8;i++) {
  27.                         duoji_pulse[i] = 2000;//循環(huán)把8個(gè)舵機(jī)位置設(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); //①時(shí)鐘 TIM2 使能       
  99.         //定時(shí)器 TIM2 初始化
  100.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置自動(dòng)重裝載寄存器周期的值
  101.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置時(shí)鐘頻率除數(shù)的預(yù)分頻值
  102.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時(shí)鐘分割
  103.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上計(jì)數(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)先級(jí) 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)先級(jí) 0 級(jí)
  112.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //從優(yōu)先級(jí) 2 級(jí)
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

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

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 97免费在线观看视频 | 丝袜美腿一区 | 国产精品欧美一区二区 | 午夜电影网址 | 99爱在线视频 | 波多野结衣精品在线 | 精品一区电影 | 国产成人精品一区二区三区网站观看 | 国产乱码精品一区二三赶尸艳谈 | 亚洲精品在线观看视频 | 国产精品一区二区三区在线 | 久久精品成人 | 91亚洲国产| 国产成人99久久亚洲综合精品 | 亚洲免费影院 | 久久精品1 | 欧美黄视频| 日韩视频一区二区三区 | 日韩在线免费视频 | 日韩视频精品 | 日韩在线小视频 | 日韩一级黄色片 | 丝袜天堂| 中文字幕乱码一区二区三区 | 国产一区视频在线 | 亚洲精品乱码久久久久久按摩观 | 韩日精品一区 | 理论片87福利理论电影 | 第一福利社区1024 | 日本精品一区二区三区在线观看视频 | 国产精品成人在线观看 | 欧美性一区二区三区 | 国产电影一区二区在线观看 | 中文字幕乱码一区二区三区 | 欧美国产精品一区二区三区 | 国产精品区一区二区三区 | 毛片免费观看 | 亚洲欧美bt | 亚洲一区二区三区在线视频 | 特黄特色大片免费视频观看 | 亚洲精品欧美 |