模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
1serial串口初始化指令:
参数1取值0或2。分别代表串口0,串口2.共两个串口。分别代表串口0,串口2.共两个串口。 0是板载的USB
系统使用接口,print,prints通过串口0输出指令;
参数2表示波特率,波特率为9600、19200、38400、57600、115200。
参数3表示要接收的数据寄存器的起始地址,按字节选址。
参数4,串口实际接收的长度,即字节数,保存到这个Dn寄存器。
参数5,串口接收完成后,会位Sn,如果此Sn串口接口注册为中断程序 收完成
后会 程序将执行中断程序。
2serialsend发送串口指令:
参数1取值0或2。分别代表串口0,串口2.共两个串口。分别代表串口0,串口2.共两个串口。 0被系统保留;
参数2表示要发送的数据寄存器的起始地址,按字节寻址。
&bsp; 参数3,串口要发送的长度,即字节数。
3 serialgetnum为获取串口接收字节数指令:
参数1取值0或2。分别代表串口0,串口2.共2个串口。其中串口 0被系统保留;
参数2保存接收的字节数。如果不想用接收中断的方式处理接收的数据,可以用
这个 指令采取查询的方式处理接收数据,当获取的字节数大于0时,表示有数据被接
收了。
例:
serial 2 115200 D40 D10 S0 //串口2初始化,波特率115200,接收的数据
//保存在D40开始的地址,接收的字节数保存在
//D10寄存器,接收完成后S0会被置1
Serialsend 2 D20 5 //把D0寄存器的4个字节和D21的第0个字节,共5
//个字节发送出去
serialgetnum 2 D30 //获取串口接收的字节数保存到D30,实际D30=D40;也可以
//不使用这条指令,通过查询D10的值来处理接收的数据
1 iic为iic初始化指令:注意此IIC是工作在主模式;
参数1取值0或1,0表示按8位地址寻址,1表示按16位地址寻址。一般带 IIC接口
的传感器 都是按8位地址寻址,比如6轴传感器MPU6050;而IIC接口的存储芯片很多是
16位地 址寻址,比如24C256。
参数2通讯速率,单位Hz,一般用100000或400000;
2 iicwrite为iic写指令:
参数1表示从地址,即接口芯片的IIC地址。
参数2是接口芯片的寄存器起始地址;
参数3是要写的数据;
参数4表要写的数据的长度,按字节数;
3 iicread为iic读指令:
参数1表示从地址,即接口芯片的IIC地址。
参数2是接口芯片的寄存器起始地址;
参数3表示读出来的数据要存储的寄存器起始地址,按字节寻址。
参数4表示要读的数据的长度,按字节数;
例:
iic 0 400000 //8位地址寻址,速率400000Hz
iicwrite hd0 h1a D0 1 //0xd0是mpu6050的IIC地址,0x1a是被写的寄存器地址,D0 //是要写的数据,写1个字节,即把D0的最低字节写到mpu6050
//的0x1a寄存器里面
iicread hd0 h3b D10 6 //0xd0是mpu6050的IIC地址,0x3b是要读的寄存器地址
//起始地址,D10是读出来的数据要存储的起始寄存器,读6个
//字节,即D10里面从低到高字节依次存储4个字节,D11从低到高
//依次存储剩下的2个字节。
1 iicslaver为iic从初始化指令:此IIC是工作在从模式;iic从的内部读写缓存都是128字节;
参数1--K,设置7位本机从地址;
参数2--In,使用寻址寄存器In,当主机要读写的寄存器地址(16位地址)保存到此寻址
寄存器里面, 注意,这里只能寻址整形寄存器Dn;
参数3--Dn,当主机写的时候,保存写的数据字节长度;
当主机读的时候,此寄存器值为读缓存长度128字节;
主机读的是前一次缓存中的数据,所以如果主机要读取最新的数据,主机要连续读2次,且
中间间隔至少50ms, 从机在第一次主机读的要在读中断中更新缓存中数据,当主机第2次
读取时就是 最新的数据内容。
参数4--Sn,读中断,当有主机读的时候,会置位此Sn;
参数5--Sn,写中断,当有主机写的时候,会置位此Sn;
2 iicslaverwrite为iic从写缓存指令,把寄存器内容写入发送缓存,待主机读取;
参数1,待写的数据寄存器起始地址;
参数2表示要写的数据的字节长度;
例:
iicslaver 52 i0 d0 s0 s1 //初始化IIC从,本机从地址52(注意是7位地址),I0保存主机
//要读写的寄存器地址,D0是读写字节长度,
//主读S0置位,主写S1置位
iicslaverwrite di0 d0 //IIC从更新发送缓存,i0是地址(主写的时候,I0已经保存了要
//写的地址),D0是字节数
1 spi为spi初始化指令:
参数1取值0,1,2,3,表示SPI的4种工作模式;
参数2是速率,取值请参加下表
参数2取值 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
SPI速度(MHz) |
1 |
2 |
4 |
8 |
9 |
10 |
11 |
13 |
16 |
20 |
26 |
40 |
80 |
表3 SPI速度取值
2 spiwrite为spi写指令:
参数1是要写的数据,因为一次性只能写一个字节,所以写的是Dn 的最低字 节;
3 spiread为spi读指令:
参数1是读出的数据,因为一次性只能读一个字节,所以读出的字节 存储在Dn 的最低
字节;
4 spirw为spi读写指令:同步读写指令,写的同时也把数据读出来;
参数1是读出的数据,读出的字节存储在Dn的最低字节;
参数2是要写的数据,写入的是Dn的最低字节;
例: spi 3 0 //工作模式3,速率2MHz.
spiwrite d0 //把d0的最低字节写到spi装置
spiread d1 //从spi装置读取一个字节存储到d1的最低字节
spirw d1 d0 //把d0的最低字节写到spi装置同时读取一个字节存储到d1的最低字节
spirw d1 11 //把值11写到spi装置同时读取一个字节存储到d1的最低字节
1 time为定时器初始化指令:
参数1取值0-9,共10个定时器或者计时器;
参数2取值0或1,0表示周期性定时器,1表示计时器;周期性定时器会在计时到
指定时间后 又从头开始计时,如此周而复始。当定时时间到后,会置位Sn,所以可以
产生周期性中 断;而计时器会一直计时下去,当达到设定值时会置位Sn,产生一个中
断,然后继续计 时下去,不会从头开始,所以此计时器只会产生一次中断;
参数3,当计时到设定值时会置位Sn,如果Sn注册了中断程序,程序会跳 到中断
程序中执行;
2 timestart为定时器启动指令:启动定时器;
参数1取值0-9,共10个定时器或者计时器;
参数2取值0或1,0表示周期性定时器,1表示计时器;周期性定时器会在计时到
指定时间后 又从头开始计时,如此周而复始。当定时时间到后,会置位Sn,所以可以
产生周期性中 断;而计时器会一直计时下去,当达到设定值时会置位Sn,产生一个中
断,然后继续计 时下去,不会从头开始,所以此计时器只会产生一次中断;
参数3为设定定时值,单位为us;
3 timestop为定时器停止指令:定时器停止计时,参数1,2与time指令一样;
4 timeget为定时器获取计时时间指令:
参数1,2与time指令一样;
参数3获取当时的计时值,单位为us;
注意:
当参数2为0即定时器设置为周期性定时器时,此指令获取的时间是从timestart指令
开始到 此指令执行时的时间,但当发生中断时,会重新开始计时,所以读取的值会小于
等于设 定的周期值;
当参数2为1即定时器设置为计时器模式时,此指令获取的时间是从timestart指令开
始到 此指令执行时的时间,不会因为有中断而重新计时,此时间会一直累加上去。因为
寄存 器为4字节有负号数,所以最大计时大概35分钟左右;
例: time 1 0 S0 //初始化周期性定时器1,定时时间到会置位s0.
timestart 1 0 1000000 //启动周期性定时器1,定时时间1s.
timestop 1 0 //停止周期性定时器1.
timeget 1 0 d0 //获取当前的计时值保存到D0寄存器
1 pwm为PWM初始化指令:
参数1为脉冲频率,单位Hz;
参数2为根据脉冲频率计算出的100%占空比时的值,保存到Dn寄存器;意思就是在
使用pwmstart 指令启动时,如果设置此值的一半,则占空比就是50%,设置四分之一就
是25%占空比; 此值会因为频率的变高而减小;
2 pwmstart为PWM启动指令:
参数1为通道,有0-7共8个通道;
参数2为占空比设定值,注意设定值不能超过pwm指令输出的Dn值。
3 pwmsetduty为PWM设置占空比指令:
参数1为通道,有0-7共8个通道;
参数2为占空比设定值,注意设定值不能超过pwm指令输出的Dn值。
4 pwmstop为PWM停止指令:
参数1为通道,有0-7共8个通道;
例: pwm 1000 d0 //pwm初始化,d0保存100%占空比的值
pwmstart 0 d0 //pwm0启动,100%占空比
pwmsetduty 0 d1 //改变占空比,如果d1=d0/2,占空比为50%
pwmstop 0 //停止pwm输出
指令说明:
1 brushmoto为有刷马达初始化指令:
参数1为通道,有0-3共4个通道。可以同时驱动4个有刷马达;
参数2为频率,单位Hz。有刷马达的速度通过改变PWM的占空比来控制;
2 brushmotomove为有刷马达运行指令:
参数1为通道,有0-3共4个通道。
参数2为占空比设置,值为正时,马达正转,最大占空比100;为负时马达反转,最
大占空比-100;
3 brushmotostop为有刷马达停止指令:
参数1为通道,有0-3共4个通道。执行这条指令后,马达控制的2个端口都输出低电
平。与占 空比设置为0时的效果一样。
例: brushmoto 1 500 //有刷马达1初始化,频率500Hz
brushmotomove 1 60 //马达1以60%占空比运行
brushmotostop 1 //马达1停止运行
1 servomoto为舵机初始化指令:此指令可以驱动舵机;也可以通过电调驱动三相无刷马
达; 频率固定为400Hz,周期为2.5ms。
参数1为通道,有0-7共8个通道;
2 servomotostart为舵机启动指令:
参数1为通道,有0-7共8个通道;
参数2为输出高电平时间,单位us,最大2500,即2.5ms;
注意:
占空比的计算公式为:占空比=输出时间*100/2500 (%) ;
如果是通过电调驱动无刷电机,一般电调的输入控制为1-2ms,即1000-2000us,让
指令输出这个时间范围就可以让无刷马达从0到最大的速度之间转动;
如果是驱动舵机,有些舵机只有正角度,就使用1000-2000us的时间可以让舵机实
现0到最大角度;有些舵机是正负角度,可能要使用500-1500us的时间输出让舵机实现
正负角度转动。具体的输出时间需要参考舵机的使用说明书。
例: servomoto 1 //舵机1初始化
servomotostart 1 1500 //输出1500us,启动舵机1,要改变舵机速度, 输出不同的
//时间就可以了
servomotostart 1 1800 //输出1800us,增加舵机速度