找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5485|回复: 5
收起左侧

Proteus8.6下STM32F103驱动步进电机源程序

  [复制链接]
ID:340846 发表于 2020-4-12 22:20 | 显示全部楼层 |阅读模式
STM32F103+ULN2003驱动步进电机的最简单例子,4相8拍
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
单片机源程序如下:

  1. #include "main.h"
  2. #include "stm32f1xx_hal.h"

  3. TIM_HandleTypeDef htim1;

  4. void LcdDelay(uint32_t time)
  5. {
  6.         while(time--);
  7. }

  8. void _NOP_(void)
  9. {
  10.     uint32_t i = 100;
  11.     while(i > 0)
  12.                 {
  13.         i--;
  14.     }
  15. }

  16. void Delay(__IO uint32_t nCount)         
  17. {
  18.         for(; nCount != 0; nCount--);
  19. }

  20. void delay_us(__IO uint32_t nTime)
  21. {
  22.     int old_val, new_val, val;

  23.     if(nTime > 900)
  24.     {
  25.         for(old_val = 0; old_val < nTime/900; old_val++)
  26.         {
  27.             delay_us(900);
  28.         }
  29.         nTime = nTime%900;
  30.     }

  31.     old_val = SysTick->VAL;
  32.     new_val = old_val - 72*nTime;
  33.     if(new_val >= 0)
  34.     {
  35.         do
  36.         {
  37.             val = SysTick->VAL;
  38.         }
  39.         while((val < old_val)&&(val >= new_val));
  40.     }
  41.     else
  42.     {
  43.         new_val +=72*1000;
  44.         do
  45.         {
  46.             val = SysTick->VAL;
  47.         }
  48.         while((val <= old_val)||(val > new_val));

  49.     }
  50. }



  51. void SystemClock_Config(void)
  52. {
  53.   RCC_OscInitTypeDef RCC_OscInitStruct;
  54.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  55.   /* Initializes the CPU, AHB and APB busses clocks */
  56.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  57.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  58.   RCC_OscInitStruct.HSICalibrationValue = 16;
  59.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  60.         HAL_RCC_OscConfig(&RCC_OscInitStruct);
  61.         
  62.     /* Initializes the CPU, AHB and APB busses clocks */
  63.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  64.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  65.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  66.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  67.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  68.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  69.         HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

  70.     /* Configure the Systick interrupt time */
  71.   //HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq()/1000 );
  72.         SysTick_Config(HAL_RCC_GetHCLKFreq()/1000);
  73.   // SysTick_Config(72000000/1000);


  74.                 /* Configure the Systick  */
  75.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  76.   /* SysTick_IRQn interrupt configuration */
  77.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  78. }



  79. static void MX_GPIO_Init(void)
  80. {
  81.   GPIO_InitTypeDef GPIO_InitStruct;

  82.   __HAL_RCC_GPIOA_CLK_ENABLE();
  83.         __HAL_RCC_GPIOB_CLK_ENABLE();
  84.   __HAL_RCC_GPIOC_CLK_ENABLE();

  85.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);
  86.   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
  87.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  88.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  89.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  90.         
  91.         HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
  92.         GPIO_InitStruct.Pin = GPIO_PIN_All;
  93.         HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  94. }

  95. /* TIM1 init function */
  96. static void MX_TIM1_Init(void)
  97. {
  98.   TIM_ClockConfigTypeDef sClockSourceConfig;
  99.   TIM_MasterConfigTypeDef sMasterConfig;

  100.   htim1.Instance = TIM1;
  101.   htim1.Init.Prescaler = 0;
  102.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  103.   htim1.Init.Period = 0;
  104.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  105.   htim1.Init.RepetitionCounter = 0;
  106.   HAL_TIM_Base_Init(&htim1);
  107.   
  108.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  109.   HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);
  110.   
  111.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  112.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  113.   HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);
  114. }

  115. #define Delay_ms(x) Delay_us(1000*x)         //单位ms


  116. #define uchar unsigned char
  117. #define uint unsigned int

  118. uchar fan[] = {0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};                                                //正向
  119. uchar zheng[] = {0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};                                        //反向


  120. int main(void)
  121. {
  122.    uint i;
  123.         
  124.         HAL_Init();
  125.         
  126.   SystemClock_Config();
  127.         
  128.   MX_GPIO_Init();
  129.   
  130.   while (1)
  131.   {
  132.                 for(i=0;i<8;i++)
  133.     {
  134.                                 //GPIOC->ODR=zheng[i];
  135.                                 GPIOC->ODR=fan[i];
  136.                                 HAL_Delay(100);                                
  137.     }
  138.                
  139.   }
  140. }
复制代码
51hei.png
所有资料51hei提供下载:
stm32f103_stepper.7z (1.17 MB, 下载次数: 213)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:340846 发表于 2020-4-12 22:21 | 显示全部楼层
自己顶一下,还请版主帮组编辑一下帖子内容,多谢
回复

使用道具 举报

ID:86450 发表于 2020-4-13 13:36 | 显示全部楼层
真是一个好帖子。
回复

使用道具 举报

ID:759427 发表于 2020-6-13 17:33 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:868532 发表于 2020-12-26 22:43 | 显示全部楼层
谢谢,很详细
回复

使用道具 举报

ID:861681 发表于 2021-6-18 23:33 来自手机 | 显示全部楼层
MX_TIM1_Init一个警告,定义但没使用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表