STM32F407配置pca9685驱动
pca9685是16路12位PWM信号发生器,可用于控制舵机、led、电机等设备,i2c通信,节省主机资源。在淘宝上随处可见,Arduino用它非常方便,不过STM32要想使用它必须要写好驱动才行,本文简述如何配置其驱动以及一些需要注意的地方。
pca9685简介
当然对于老手,看datasheet是最好的选择pca9685datasheet
对于我这种新手,自然是看高手的文章比较容易上手了~
我在网上看到的对pca9685总结的最好的一篇文章推荐给大家:生命不息折腾不止
博主写得非常详细,本文某些片段也是参考博主的这篇文章,在此致谢。
pca9685用的是IIC通信,如果有同学对IIC不熟悉,要先去了解一下~
pca9685驱动
网上有不少写pca9685的文章,写驱动的也有,不过我试过的大多有错误,我详细地进行了修改,并且调试成功,走了不少弯路。
pcf8574.h:
头文件的话主要就是寄存器地址和IIC通信的函数声明,比较简单。
内部地址(hex) | 名称 | 功能 |
---|---|---|
Harry Potter | Gryffindor | 90 |
Hermione Granger | Gryffindor | 100 |
Draco Malfoy | Slytherin | 90 |
00 | MODE1 | 设置寄存器1 |
01 | MODE2 | 设置寄存器2 |
02 | SUBADR1 | i2c-bus subaddress1 |
03 | SUBADR2 | i2c-bus subaddress2 |
04 | SUBADR3 | i2c-bus subaddress3 |
05 | ALLCALLADR | |
06 | LED0_ON_L | |
07 | LED0_ON_H | |
08 | LED0_OFF_L | |
09 | LED0_OFF_H | |
… | … | … |
0x06 + 4*X | LEDX_ON_L | |
0x06 + 4*X + 1 | LEDX_ON_H | |
0x06 + 4*X + 2 | LEDX_OFF_L | |
0x06 + 4*X + 3 | LEDX_OFF_H | |
… | … | … 上面共16路通道 |
FA | ALL_LED_ON_L | |
FB | ALL_LED_ON_H | |
FC | ALL_LED_OFF_L | |
FD | ALL_LED_OFF_H | |
FE | PRE_SCALE 控制周期的寄存器 | |
FF | TestMode |
照着上面的表格写头文件就好了 - -
#ifndef __PCF8574_H
#define __PCF8574_H
#include "sys.h"
#include "myiic.h"
#define PCA9685_adrr 0x80<