目录
1.原理图
2.CubeMx配置
(1)创建工程
(2)配置时钟树
(3)仿真模式选择
(4)TIM2配置为PWM输出模式
(5)定时器TIM3,TIM4设置为编码器模式
(6)蓝牙串口配置
(7)I2C1配置(与MPU6050通信)
(8)I2C2配置(0.96寸OLED)
(9)MPU6050外部中断引脚配置
(10)NVIC中断配置
3.生成代码
1.原理图
这里最小系统版采取5V供电,这样的话它的3.3V和GND的端口就可以用来给其它模块供电,就不需要在面包板上引出来了,也可采用3.3v供电,同时还要注意最小系统版上的usb接口仅仅用来供电,不具备程序烧录的功能,烧录程序用其侧边的四个sw口。
2.CubeMx配置
由于本人实习期间的一个任务就是学习如何使用CubeMx,所以这次就用CubeMx来进行了程序设计,CubeMx所使用的是HAL库,比起标准库,HAL库封装更加精密,但是在有错时也更难以发现。
(1)创建工程
选择对应的芯片型号,双击就可以创建工程
(2)配置时钟树
点击RCC,开启外部高速时钟源,选择外部晶振作为时钟源
配置时钟树,如下图所示
(3)仿真模式选择
在sys中的Debug选择Serial Wire模式,这个就是我前面提到的程序烧录接口对应的sw模式
(4)TIM2配置为PWM输出模式
定时器2最多可同时产生四路PWM波,这里我们仅仅需要两路即可,可以看到其对应的引脚为PA0,PA1.
点击parameter setting,这里给出pwm波频率计算方法
psc为预分频系数,arr为计数周期,72000000为系统的时钟频率72MHz,我们想要10KHz的pwm波,因此我们可以令psc=0,arr=7199。
然后开启自动重裝载计数值,使得TIM2持续输出PWM波,下面的Pulse为跳变为低电平的计数值,占空比=Pulse/arr。
点击GPIO Setting,设置其输出速率为High
(5)定时器TIM3,TIM4设置为编码器模式
将定时器Combined Channels设置为Encoder Mode,并把PA6,PA7设置为上拉输入Pull-up
把编码器的计数模式改为上升下降沿都计数,这就是网上教学里所说的四分频,如果你要计算小车的实际速度,这个设置在计算时需要考虑进去,但我们这里没有计算速度,而是直接用定时器的计数值来作为控制的参数。
把TIM4也按照同样的方法进行配置。
(6)蓝牙串口配置
串口模式为异步通信,波特率设置为9600,这里我们只用到了单个字符的收发,因此就不采用中断来进行收发了。
(7)I2C1配置(与MPU6050通信)
这是硬件I2C,网上都说stm32的硬件I2C存在Bug,不过我没有遇到,如果你不想使用硬件I2C,也可以不用设置,可以通过软件模拟I2C的通信功能,这个具体的可以去从原子哥的MPU6050的教程,我两个都尝试过,都OK的。
把I2C的速率设置为Fast Mode,i2c本来有3种工作模式,低速、快速、高速,分别对应100kbit/s、400kbit/s、3.4Mbit/s.
(8)I2C2配置(0.96寸OLED)
I2C的速率设置为Standard Mode
(9)MPU6050外部中断引脚配置
点击PB12引脚,选择外部中断GPIO EXTI12模式
点击GPIO,设置PB12为下降沿触发,因为我们后续会设置MPU6050的中断平信号为低电平。
(10)NVIC中断配置
使系统滴答定时器的抢占优先级高于外部中断
3.生成代码
点击GENERATE CODE生成代码,生成的代码如下图所示 ,这只是各个模块的初始化代码,接下来就是我们自己添加想要实现的功能的代码 。
本文借鉴了这位大佬的文章,因为配置上也改不出多大的花,所以文章会有所相似,如有侵权,请联系我。
HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置、原理图接线、物料准备_想要亿只独角兽的博客-CSDN博客_基于stm32的两轮平衡车
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)