SYD8801 PWM使用说明
来源:互联网 发布:js中json对象添加元素 编辑:程序博客网 时间:2024/05/21 23:00
SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.syd-tek.com/
SYD8801 PWM使用说明
Syd8801的PWM模块支持三种模式:闪光、PWM、呼吸灯,他们的时序如下:
使用内部定时器的话必须经过校准,对于外设驱动代码使用LPOCaliWaitUS函数进行校准,如果代码中包含了《syd_ble_keil.lib》库,则调用LPOCalibration函数进行校准。使用内部32.768Khz时钟的PWM程序如下:
static voidtimer2_callback(void);
uint8_t j=0;
int main()
{
uint8_t i=0;
PWM_PARAMETER pwm_parameter;
if(LPOCaliWaitUS(1000)){ //这是内部RC32k晶振的校准函数 for(i=0;i<6;i++){
led_turn(LEDALL);
delay_ms(300);
}
}else{
for(i=0;i<20;i++){
led_turn(LEDALL);
delay_ms(300);
}
}
//Flash mode
pwm_parameter.MODE=flash_mode;
pwm_parameter.T1=0x10; //16 * 1/32=0.5s 实测0.768563250
pwm_parameter.T2=0x20; //32 * 1/32=1s 实测1.585201375
pwm_parameter.T3=0x0000;
pwm_parameter.N1=0x80;
pwm_parameter.N2=0x80;
pwm_enable(PWM_0,pwm_parameter);
//Breath mode timing
pwm_parameter.MODE=breath_mode;
pwm_parameter.BR_TH_MAX=0x28; //255/2=125.5ms
pwm_parameter.BR_TH_MIN=0x02; //2/2=1ms
pwm_parameter.T4=0x28; //255/2=125.5ms
pwm_parameter.BR_SP=0x0f; //255/32=7.96876ms
pwm_enable(PWM_1,pwm_parameter);
//PWM mode timing
pwm_parameter.MODE=pwm_mode;
pwm_parameter.PWM_M=0xff;
pwm_parameter.PWM_N=0xCF;
pwm_enable(PWM_2,pwm_parameter);
timer_2_enable(0x7D00,timer2_callback); // 32000 /31.25 ms = 976.5625 ms
while(1)
{
if(j>180){ //最晚三分钟必须再校准一次
j=0;
LPOCaliWaitUS(1000);
}
}
}
static voidtimer2_callback(void)
{
j++;
}
这里要注意的是:这是因为现在使用的是内部的时钟基准,没有校准过的内部的时钟存在着很大的误差,所以调用LPOCaliWaitUS函数校准,并且3分钟必须校准一次。
如果这里使用32.768Khz的外部晶振则不需要校准,下面是使用外部32.768Khz的程序:
int main()
{
uint8_tdata;
PWM_PARAMETERpwm_parameter;
BBRFWrite(0x7F,0x00); // switch Bank A
BBRFRead(0x03,&data); //读回要配置的寄存器
BBRFWrite(0x03,data | 0x04); //置位B_M2_32KXtal_EN,打开外部晶振
BBRFWrite(0x7F,0x02); // switch Bank C
BBRFRead(0x00,&data);
BBRFWrite(0x00,data | 0x01); //置位RG_CLK32K_SEL,使定时器使用外部32k晶振
//Flashmode
pwm_parameter.MODE=flash_mode;
pwm_parameter.T1=0x10; //16 * 1/32=0.5s
pwm_parameter.T2=0x20; //32 * 1/32=1s
pwm_parameter.T3=0x0000;
pwm_parameter.N1=0x80; //永久重复,没有T3
pwm_parameter.N2=0x80; //永久重复
pwm_enable(PWM_0,pwm_parameter);
//Breathmode timing
pwm_parameter.MODE=breath_mode;
pwm_parameter.BR_TH_MAX=0x28; //40/2=20ms
pwm_parameter.BR_TH_MIN=0x0A; //10/2=1ms
pwm_parameter.T4=0x28; //40/2=20ms
pwm_parameter.BR_SP=0x0f; //15/32ms=0.46875ms
pwm_enable(PWM_1,pwm_parameter);
//PWMmode timing
pwm_parameter.MODE=pwm_mode;
pwm_parameter.PWM_M=0xff; //255/32ms=7.96875ms
pwm_parameter.PWM_N=0xCF; //207/32ms=6.46875ms
pwm_enable(PWM_2,pwm_parameter);
while(1)
{
}
}
最后注意一点:PWM和定时器是独立的单元,也就是说SYD8801有三路定时器,三路PWM
这里上传本门设计的源代码:
http://download.csdn.net/detail/chengdong1314/9819167
其中:
《08PWM》使用内部晶振
《08PWM_32KXtal》使用外部32.768Khz晶振
- SYD8801 PWM使用说明
- SYD8801定时器使用说明
- SYD8801 ADC使用说明【校准】
- SYD8801 systick tick timer 使用说明
- SYD8801蓝牙profile(UUID)的使用说明
- PWM
- PWM
- pwm
- PWM?
- PWM
- PWM
- PWM
- PWM
- PWM
- PWM
- PWM
- PWM
- PWM
- 导入exl()
- [CoffeeBot] 安装Chrome浏览器扩展
- java并发编程:发布与逸出
- Android設置overridePendingTransition無效解決
- webrtc turn服务器的坑
- SYD8801 PWM使用说明
- [kuangbin带你飞]专题二十二 区间DP
- spring MVC 项目创建
- Android Studio解决导入项目非常慢的问题
- 读取解密后的文件内容
- 基础正则表达式
- 定时备份mysql 数据库
- pcd格式点云的读取与显示
- Linux的五个查找命令:find,locate,whereis,which,type