最近使用STM8L芯片做项目,有几个地方可以总结下经验以便以后查阅。
一:主频的影响
STM8L有内部RC时钟16M可以调用下面函数初始化系统时钟为内部RC时钟,并可以分频。如下系统时钟是芯片内RC时钟分频2M。
void CLK_Configion(void)
{
CLK_HSICmd(ENABLE); //HSI时钟使能
RCCLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI); //HSI为系统时钟
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_8); //不分频,16M/8=2M
}
主频会影响时钟周期指令周期,它也会影响整个功能模块的运行。如TIME,UART。
TIME:
在STM8L主频是RC分频2M时 发现TIME定时器最小触发周期是100us左右,寄存器设置成<100us触发无效,它依然是100us左右周期触发,只有设置成>100us触发,实际触发才会和寄存器设置的值一样。
这个应该是主频2M时,最快的响应速度了。响应周期<100us主频最好设置成16M。
UART
在STM8L主频和UART波特率不匹配,应会影响数据发送,出现乱码。比如2M时 波特率9600比较稳定,波特率115200会比较迟钝这个还比较好理解时钟慢,响应不过来。16M时115200比较稳定,9600有时会出现乱码,这个不知道为什么可能由于内部芯片时序原因。总的来说2M主频9600波特率比较稳定。115200波特率尽量用16M。
虽然它们的时钟通过RC时钟分频后都相对独立,但是系统时钟影响指令周期也会对其它功能模块有影响,这里需要注意。
RTC
主频对RTC计时没什么影响,因为RTC使用内部另一个38K低功耗时钟源。
内部参考电压1.21V
STM8L的内部参考电压1.21V不是用来给AD采样的基准电压,而是内部输出1.21V的参考电压。芯片内部AD采样的基准电压时钟始终是电源电压VCC。
参考电压1.21V可以采样出AD值 AD_1.2。它可以有两个作用:
8位分辨率为例。
反推出电源电压VCC。
VCC换算公式
经过换算可以得出以1.21V为基准电压的AD外部采样值。每次采样要采样两个AD值 一个是内部的1.21V值AD_1.2,一个是外部电压的AD采样值AD_in。
以1.21V为基准电压,换算出外部电压的采样值为AD_new。它们之间存在以下等式:
AD_new换算公式