STM32与PC串口通信 实现步进电机转速可调 程序及调试过程分享

本文分享了使用STM32F103ZET6通过计时器产生PWM波来控制步进电机转速的过程。通过PC串口发送0-5的数字调整电机速度,同时在LCD屏幕上显示接收到的值。内容涉及串口通信协议转换和PWM频率调整的注意事项。
摘要由CSDN通过智能技术生成

在读书期间,需要用到步进电机。用STM32F103ZET6作为下位机,采用计时器产生PWM波,通过改变改变ARR的值,改变PWM波的频率,实现步进电机调速,LCD屏幕显示串口收到的数值。
PC作为上位机,利用串口向STM32发出0-5的数字,根据收到的数值改变步进电机转速。
需要注意两点:
(1) PC上面的串口调试助手在默认情况下,发出的是ASCⅠⅠ码,在接收时需要做数据处理,运算输出数字;
(2)改变计数器产生PWM的频率与改变占空比不用,改变占空比的时候,可以在PWM连续产生的过程中改变,而改变PWM波的频率,需要先DISABLE,更新ARR,再ENABLE(该方法是目前试的一种可用的,应该还会有其他方法。。。)。

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "lcd.h"
#include "math.h"
 
 int main(void)
 {
   		
	//extern u32 tally;        //用法  extern + 类型 + 变量名
	//u16    Angle_num;
	//u32    Num; 
	u8 t;
	u8 n; 
	u8 len;
  //u16 speed_val;
	u16 val; 
	delay_init();	    	     //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	     //串口初始化为115200
 	LED_Init();              //LED端口初始化
  OUTPUT_Init();
  //TIM2_PWM_Init(100,72);	 
  //Angle_num=360;                   //表示要转的角度 10个脉冲电机转1°
	//Num=Angle_num*10; 	             //3600 Pulse/rev  Angle_num表示要转多少度(10个脉冲转一度)
 	LCD_Init();			 	   //LCD端口初始化
	POINT_COLOR=RED;     //设置字体为红色 
	LCD_ShowString(60,50,200,16,16,"Elite STM32");	
	LCD_ShowString(60,70,200,16,16,"USART");	
	LCD_ShowString(
  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值