在读书期间,需要用到步进电机。用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(