找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32单片机57步进电机测试程序 可控制pwm频率

[复制链接]
跳转到指定楼层
楼主



stm32单片机源程序:
  1. /************************************************************
  2. ************************************************************/
  3. #include "bsp_TB6600_TIM.h"
  4. #include "stm32f10x.h"
  5. #include "stm32f10x_usart.h"
  6. #include <stdio.h>

  7. char RX=0;
  8. extern __IO uint16_t prescaler;//这个参数控制pwm频率
  9. /////////////////////////串口函数///////////////////////////////
  10. void Printf_Configuration(void);
  11. void Usart_GPIO_Configuration(void);
  12. ////////////////////////////////////////////////////////////////
  13. void RCC_Configuration(void);
  14. void Limit(uint16_t F);//速度限制
  15. ////////////////////////////////////////////////////////////////
  16. //////////////////////printf函数////////////////////////////////
  17. int fputc(int ch,FILE*f)
  18. {
  19.         while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET);//等待发送完毕
  20.         USART_SendData(USART1,ch);//将ch送给usart1
  21.         return(ch);//返回ch
  22. }
  23. //因为printf()之类的函数,使用了半主机模式。使用标准库会导致程序无法运行。有两种解决方法
  24. //1.使用微库。魔术棒——Target——Code Generation选择使用Use MicroLIB
  25. //2.添加如下程序代码
  26. struct __FILE
  27. {
  28. int handle;
  29. /* Whatever you require here. If the only file you are using is */
  30. /* standard output using printf() for debugging, no file handling */
  31. /* is required. */
  32. };
  33. FILE __stdout; // FILE is typedefed in stdio.h.
  34. ///////////////////////////////////////////////////////////////////
  35. ///////////////////////////////////////////////////////////////////


  36. int main(void)
  37. {
  38.         RCC_Configuration();
  39.         TB6600_TIMx_PWM_Init();
  40.         Usart_GPIO_Configuration();
  41.         Printf_Configuration();
  42.         printf("start");
  43.         while(1)       //必须有while(1)否侧程序就会跑飞
  44.         {
  45.                 while(USART_GetFlagStatus( USART1,  USART_FLAG_RXNE)==RESET);
  46.                 RX=USART_ReceiveData(USART1);
  47.                 if(RX=='Z')//原速300r/s
  48.                 {
  49.                         prescaler=125;
  50.                         printf("speed:300r/s\n\r");
  51.                 }
  52.                 if(RX=='A')//加速600r/s
  53.                 {
  54.                         prescaler=62;
  55.                         printf("speed:600/s\n\r");
  56.                 }
  57.                 if(RX=='E')//减速150r/s
  58.                 {
  59.                         prescaler=250;
  60.                         printf("speed:150/s\n\r");
  61.                 }
  62.         }
  63. }

  64. void RCC_Configuration(void)
  65. {
  66.   RCC_DeInit();   //初始化缺省值
  67.   RCC_HSEConfig(RCC_HSE_ON);//使能外部高速时钟
  68.   while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
  69.         FLASH_SetLatency(FLASH_Latency_2);
  70.   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  71.         RCC_HCLKConfig(RCC_SYSCLK_Div1);   //HCLK=SYSCLK
  72.         RCC_PCLK2Config(RCC_HCLK_Div1);    //PCLK2=HCLK
  73.         RCC_PCLK1Config(RCC_HCLK_Div2);    //PCLK1=HCLK/2
  74.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  75.         RCC_PLLCmd(ENABLE);
  76.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){};
  77.   /* Select PLL as system clock source */
  78.   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  79.   /* Wait till PLL is used as system clock source */
  80.   while(RCC_GetSYSCLKSource()!= 0x08);
  81.   /* Enable GPIOB, GPIOC and AFIO clocks */
  82.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
  83.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);       
  84. }

  85. void Usart_GPIO_Configuration(void)
  86. {
  87.   GPIO_InitTypeDef GPIO_InitStructure;

  88.   /* Configure USARTX_TX as alternate function push-pull */
  89.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_9;
  90.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  91.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  92.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  93.   /* Configure USARTX_RX as input floating */
  94.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_10;
  95.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  96.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  97.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);       
  98. }

  99. void Printf_Configuration(void)
  100. {
  101.         USART_InitTypeDef USART_InitStructure;
  102.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
  103.   USART_InitStructure.USART_BaudRate = 9600;
  104.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  105.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  106.   USART_InitStructure.USART_Parity = USART_Parity_No;
  107.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  108.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  109.   USART_Init(USART1, &USART_InitStructure);
  110.   USART_Cmd(USART1, ENABLE);
  111. }
  112. void USART2_IRQHandler(void)
  113. {
  114.   if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//判断中断来源标志
  115.   {
  116.                 USART_ClearFlag(USART2,USART_IT_RXNE);//清除中断标志
  117.                 while(USART_GetFlagStatus( USART2,USART_FLAG_RXNE)==RESET);//判断接收标志,否则数据会丢失
  118.                


  119. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整代码下载:
57步进电机测试.zip (2.06 MB, 下载次数: 125)


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

使用道具 举报

沙发
ID:298184 发表于 2018-3-28 10:39 | 只看该作者
这个是带驱动器的吗
回复

使用道具 举报

板凳
ID:677805 发表于 2021-5-17 15:53 来自手机 | 只看该作者
如何接线呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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