你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【HAL库每天一例】第103例:57&42步进电机基本旋转实现

[复制链接]
haohao663 提问时间:2016-8-27 09:21 /
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。

参考文档见:

硬石电机控制专题指导手册
例程下载:
资料包括程序、相关说明资料以及软件使用截图

百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1
360云盘:http://yunpan.cn/OcPiRp3wEcA92u密码 cfb6
(硬石YS-F1Pro开发板HAL库例程持续更新\5. 软件设计之电机控制(HAL库版本)\步进电机.zip
/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL_MOTOR-004. 57&42步进电机基本旋转实现
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
【2】跳线帽情况
【3】操作及现象
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg
CubeMX_2.jpg

CubeMX_3.jpg
CubeMX_4.jpg
CubeMX_6.jpg

bsp_STEPMOTOR.c文件内容
  1. /**
  2.   * 函数功能: 驱动器相关GPIO初始化配置
  3.   * 输入参数: 无
  4.   * 返 回 值: 无
  5.   * 说    明: 无
  6.   */
  7. static void STEPMOTOR_GPIO_Init(void)
  8. {
  9.   GPIO_InitTypeDef GPIO_InitStruct;
  10.   
  11.   /* 引脚端口时钟使能 */
  12.   STEPMOTOR_TIM_GPIO_CLK_ENABLE();
  13.   STEPMOTOR_DIR_GPIO_CLK_ENABLE();
  14.   STEPMOTOR_ENA_GPIO_CLK_ENABLE();
  15.   
  16.   /* 驱动器脉冲控制引脚IO初始化 */
  17.   GPIO_InitStruct.Pin = STEPMOTOR_TIM_PUL_PIN;
  18.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  19.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  20.   HAL_GPIO_Init(STEPMOTOR_TIM_PUL_PORT, &GPIO_InitStruct);
  21.   
  22.   /* 驱动器方向控制引脚IO初始化 */
  23.   HAL_GPIO_WritePin(STEPMOTOR_DIR_PORT,STEPMOTOR_DIR_PIN,GPIO_PIN_RESET);
  24.   GPIO_InitStruct.Pin = STEPMOTOR_DIR_PIN;
  25.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  26.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  27.   HAL_GPIO_Init(STEPMOTOR_DIR_PORT, &GPIO_InitStruct);
  28.   
  29.   /* 驱动器脱机使能控制引脚IO初始化 */
  30.   HAL_GPIO_WritePin(STEPMOTOR_ENA_PORT,STEPMOTOR_ENA_PIN,GPIO_PIN_RESET);
  31.   GPIO_InitStruct.Pin = STEPMOTOR_ENA_PIN;
  32.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  33.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  34.   HAL_GPIO_Init(STEPMOTOR_ENA_PORT, &GPIO_InitStruct);
  35. }

  36. /**
  37.   * 函数功能: 驱动器定时器初始化
  38.   * 输入参数: 无
  39.   * 返 回 值: 无
  40.   * 说    明: 无
  41.   */
  42. void STEPMOTOR_TIMx_Init(void)
  43. {
  44.   TIM_ClockConfigTypeDef sClockSourceConfig;             // 定时器时钟
  45.   TIM_MasterConfigTypeDef sMasterConfig;                 // 定时器主模式配置
  46.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;   // 刹车和死区时间配置
  47.   TIM_OC_InitTypeDef sConfigOC;                          // 定时器通道比较输出
  48.   
  49.   /* 定时器基本环境配置 */
  50.   htimx_STEPMOTOR.Instance = STEPMOTOR_TIMx;                                 // 定时器编号
  51.   htimx_STEPMOTOR.Init.Prescaler = STEPMOTOR_TIM_PRESCALER;                  // 定时器预分频器
  52.   htimx_STEPMOTOR.Init.CounterMode = TIM_COUNTERMODE_UP;                  // 计数方向:向上计数
  53.   htimx_STEPMOTOR.Init.Period = STEPMOTOR_TIM_PERIOD;                        // 定时器周期
  54.   htimx_STEPMOTOR.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;              // 时钟分频
  55.   htimx_STEPMOTOR.Init.RepetitionCounter = STEPMOTOR_TIM_REPETITIONCOUNTER;  // 重复计数器
  56.   HAL_TIM_Base_Init(&htimx_STEPMOTOR);

  57.   /* 定时器时钟源配置 */
  58.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;       // 使用内部时钟源
  59.   HAL_TIM_ConfigClockSource(&htimx_STEPMOTOR, &sClockSourceConfig);

  60.   /* 初始化定时器比较输出环境 */
  61.   HAL_TIM_OC_Init(&htimx_STEPMOTOR);
  62.   
  63.   /* 定时器主输出模式 */
  64.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  65.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  66.   HAL_TIMEx_MasterConfigSynchronization(&htimx_STEPMOTOR, &sMasterConfig);
  67.   
  68.   /* 刹车和死区时间配置 */
  69.   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  70.   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  71.   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  72.   sBreakDeadTimeConfig.DeadTime = 0;
  73.   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  74.   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  75.   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  76.   HAL_TIMEx_ConfigBreakDeadTime(&htimx_STEPMOTOR, &sBreakDeadTimeConfig);

  77.   /* 定时器比较输出配置 */
  78.   sConfigOC.OCMode = TIM_OCMODE_TOGGLE;                // 比较输出模式:反转输出
  79.   sConfigOC.Pulse = Toggle_Pulse;                      // 脉冲数
  80.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;          // 输出极性
  81.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;         // 互补通道输出极性
  82.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;           // 快速模式
  83.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;       // 空闲电平
  84.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;     // 互补通道空闲电平
  85.   HAL_TIM_OC_ConfigChannel(&htimx_STEPMOTOR, &sConfigOC, TIM_CHANNEL_1);

  86.   /* STEPMOTOR相关GPIO初始化配置 */
  87.   STEPMOTOR_GPIO_Init();
  88.   
  89.   /* 配置定时器中断优先级并使能 */
  90.   HAL_NVIC_SetPriority(STEPMOTOR_TIMx_IRQn, 0, 0);
  91.   HAL_NVIC_EnableIRQ(STEPMOTOR_TIMx_IRQn);

  92. }

  93. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码



CubeMX_5.jpg
收藏 评论1 发布时间:2016-8-27 09:21

举报

1个回答
stary666 回答时间:2016-8-27 12:43:04

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版