简单来说,存在一个计数器,计数值随时间进行周期性变化。最小值和最大值之间存在一个自定的值,当计数器的值小于自定值时,I/O输出低电平,大于自定值则产生高电平。通过设置不同的最大值和自定值,可以控制I/O口输出不同时间宽度的高低电平。
定义GPIO结构体 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); ///> 使能GPIOA时钟 /*! * 初始化GPIOA9, GPIOA10 */ { GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; ///> 初始化PA9, PA10 GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_OUT; ///> 普通输出模式 GPIO_InitStructrue.GPIO_OType = GPIO_OType_PP; ///> 推挽输出 GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_100MHz; ///> 输出频率为100MHz GPIO_InitStructrue.GPIO_PuPd = GPIO_PuPd_UP; ///> 上拉,输出高电平 GPIO_Init(GPIOA, &GPIO_InitStructrue); ///> 初始化GPIO } GPIO_SetBits(GPIOA, GPIO_Pin_9); ///> P9设置为高电平 GPIO_ResetBits(GPIOA, GPIO_Pin_10); ///> P10设置为低电平 } 4. 电机控制motor.h/**@file motor.h
* @brief 电机对应I/O口初始化
* @author BROSY
* @date 2020年4月19日
* @version V1.0
* @copyright CSU | BROSY
*******************************************************************************
* @par 修改日志:
*
* Date Version Author Description
* 2018/08/17 1.0 songqijin 创建初始版本
*
*******************************************************************************
*/
#ifndef __MOTOR_
#define __MOTOR_
/*===============================函数声明 ======================================*/
void MOTOR_Init(void); ///< 初始化电机对应I/O口 PA9, PA10
#endif
5. 备注
PWM频率过高会导致电机发出蜂鸣声
电机转速较慢可能是因为GND接口没有接到一起
找不到头文件可能是因为没有设置包含路径
三、参考资料
B站视频:【正点原子】stm32f4视频教程(初级篇)
文字资料站:正点原子论坛
有分的大佬可以直接点上面下载(2个积分),没分的也可以到群文件里面下载
不需要资料的也可以来一起玩啊
喜欢搞事情、DIY、学技术的同学可以关注下面这个的公众号,了解更多有更趣的项目。