找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1893|回复: 1
打印 上一主题 下一主题
收起左侧

STM32控制步进电机 源程序

[复制链接]
跳转到指定楼层
楼主
ID:297382 发表于 2020-9-17 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "stm32f10x.h"
  2. #include "stm32f10x_rcc.h"
  3. #include "misc.h"

  4. void RCC_Configuration(void);
  5. void GPIO_Configuration(void);
  6. void ZhengZhuan(u16 tt);
  7. void FanZhuan(u16 tt);
  8. void delay_ms(u16 nms);

  9. /****************************************************************************
  10. * 名    称:int main(void)
  11. * 功    能:主函数
  12. * 入口参数:无
  13. * 出口参数:无
  14. * 说    明:
  15. * 调用方法:无
  16. ****************************************************************************/
  17. int main(void)
  18. {
  19.   RCC_Configuration();        //系统时钟设置及外设时钟使能                  
  20.   GPIO_Configuration();

  21.   while (1)
  22.   {       
  23.           //读取PC5管脚的输入状态         K1  
  24.         if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == Bit_RESET)
  25.         {
  26.                 ZhengZhuan(5);//高速
  27.         }

  28.         //读取PC5管脚的输入状态           K2
  29.         if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == Bit_RESET)
  30.         {
  31.                 FanZhuan(5);//高速
  32.         }       

  33.         //读取PC2管脚的输入状态            K3
  34.         if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == Bit_RESET)
  35.         {
  36.                 ZhengZhuan(10);//低速
  37.         }

  38.         //读取PC3管脚的输入状态            K4
  39.         if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == Bit_RESET)
  40.         {
  41.                 FanZhuan(10);//低速
  42.         }

  43.           GPIO_ResetBits(GPIOD, GPIO_Pin_3);
  44.           GPIO_ResetBits(GPIOD, GPIO_Pin_6);
  45.           GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  46.           GPIO_ResetBits(GPIOE, GPIO_Pin_4);
  47.   }
  48. }

  49. /****************************************************************************
  50. * 名    称:void RCC_Configuration(void)
  51. * 功    能:系统时钟配置为72MHZ, 外设时钟配置
  52. * 入口参数:无
  53. * 出口参数:无
  54. * 说    明:
  55. * 调用方法:无
  56. ****************************************************************************/
  57. void RCC_Configuration(void)
  58. {
  59.   SystemInit();
  60.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);
  61. }

  62. /****************************************************************************
  63. * 名    称:void GPIO_Configuration(void)
  64. * 功    能:LED控制口线及键盘设置
  65. * 入口参数:无
  66. * 出口参数:无
  67. * 说    明:
  68. * 调用方法:无
  69. ****************************************************************************/
  70. void GPIO_Configuration(void)
  71. {
  72.   GPIO_InitTypeDef GPIO_InitStructure;                                //端口配置结构体

  73.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                        //PD3管脚
  74.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  75.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  76.   GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口       

  77.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                        //PD6管脚
  78.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  79.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  80.   GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口       

  81.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                //PD12管脚
  82.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  83.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  84.   GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口       

  85.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                        //PE4管脚
  86.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  87.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  88.   GPIO_Init(GPIOE, &GPIO_InitStructure);                        //初始化端口       


  89.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                        //PC5管脚
  90.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                //输入上拉
  91.   GPIO_Init(GPIOC, &GPIO_InitStructure);                        //初始化端口

  92.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                        //PC1管脚
  93.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                //输入上拉
  94.   GPIO_Init(GPIOC, &GPIO_InitStructure);                        //初始化端口

  95.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                        //PC2管脚
  96.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                //输入上拉
  97.   GPIO_Init(GPIOC, &GPIO_InitStructure);                        //初始化端口

  98.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                        //PC3管脚
  99.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                //输入上拉
  100.   GPIO_Init(GPIOC, &GPIO_InitStructure);                        //初始化端口
  101. }
  102. //电机正转函数
  103. void ZhengZhuan(u16 tt)
  104. {
  105.             //1100
  106.           GPIO_SetBits(GPIOD, GPIO_Pin_3);
  107.           GPIO_SetBits(GPIOD, GPIO_Pin_6);
  108.           GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  109.           GPIO_ResetBits(GPIOE, GPIO_Pin_4);
  110.           delay_ms(tt);
  111.           //0110  
  112.           GPIO_ResetBits(GPIOD, GPIO_Pin_3);
  113.           GPIO_SetBits(GPIOD, GPIO_Pin_6);
  114.           GPIO_SetBits(GPIOD, GPIO_Pin_12);
  115.           GPIO_ResetBits(GPIOE, GPIO_Pin_4);
  116.           delay_ms(tt);
  117.           //0011
  118.           GPIO_ResetBits(GPIOD, GPIO_Pin_3);
  119.           GPIO_ResetBits(GPIOD, GPIO_Pin_6);
  120.           GPIO_SetBits(GPIOD, GPIO_Pin_12);
  121.           GPIO_SetBits(GPIOE, GPIO_Pin_4);
  122.           delay_ms(tt);
  123.           //1001          
  124.           GPIO_SetBits(GPIOD, GPIO_Pin_3);
  125.           GPIO_ResetBits(GPIOD, GPIO_Pin_6);
  126.           GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  127.           GPIO_SetBits(GPIOE, GPIO_Pin_4);
  128.           delay_ms(tt);
  129. }
  130. //电机反转函数
  131. void FanZhuan(u16 tt)
  132. {
  133.           //1001          
  134.           GPIO_SetBits(GPIOD, GPIO_Pin_3);
  135.           GPIO_ResetBits(GPIOD, GPIO_Pin_6);
  136.           GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  137.           GPIO_SetBits(GPIOE, GPIO_Pin_4);
  138.           delay_ms(tt);
  139.           //0011
  140.           GPIO_ResetBits(GPIOD, GPIO_Pin_3);
  141.           GPIO_ResetBits(GPIOD, GPIO_Pin_6);
  142.           GPIO_SetBits(GPIOD, GPIO_Pin_12);
  143.           GPIO_SetBits(GPIOE, GPIO_Pin_4);
  144.           delay_ms(tt);          
  145.           //0110
  146.           GPIO_ResetBits(GPIOD, GPIO_Pin_3);
  147.           GPIO_SetBits(GPIOD, GPIO_Pin_6);
  148.           GPIO_SetBits(GPIOD, GPIO_Pin_12);
  149.           GPIO_ResetBits(GPIOE, GPIO_Pin_4);
  150.           delay_ms(tt);
  151.           //1100
  152.           GPIO_SetBits(GPIOD, GPIO_Pin_3);
  153.           GPIO_SetBits(GPIOD, GPIO_Pin_6);
  154.           GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  155.           GPIO_ResetBits(GPIOE, GPIO_Pin_4);
  156.           delay_ms(tt);          
  157. }

  158. void delay_ms(u16 nms)
  159. {
  160.          u32 temp;
  161.          SysTick->LOAD = 9000*nms;
  162.          SysTick->VAL=0X00;//清空计数器
  163.          SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
  164.          do
  165.          {
  166.           temp=SysTick->CTRL;//读取当前倒计数值
  167.          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
  168.          SysTick->CTRL=0x00; //关闭计数器
  169.          SysTick->VAL =0X00; //清空计数器
  170. }
复制代码


STM32控制步进电机.rar

270.23 KB, 下载次数: 40, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2020-9-17 15:59 | 只看该作者
能分享一下源程序吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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