历史上的今天
今天是:2024年09月13日(星期五)
2021年09月13日 | STM8S自学笔记-005 精准延时
2021-09-13 来源:eefocus
精准延时
“精准延时”函数的使用场景是主时钟=16MHz时的情况。因为STM8S103的最高主时钟为16MHz,所以在其它情况下,延时函数会跑得相对慢一些,但并没有丧失功能。
可将下列代码添加到Drv_CLK.c的尾部,并在Drv_CLK.h中追加毫秒级延迟函数Delay_1ms的声明,即可在外部进行调用。
精准延时的代码
/**
* @brief Delay 1 us.
* @param None
* @retval None
*/
#pragma optimize = none
void Delayus(void)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
/**
* @brief Delay x ms.
* @param x: time
* @retval None
*/
#pragma optimize = none
void Delay_1ms(uint32_t x)
{
uint16_t i;
while (x--)
for (i = 900; i > 0; i--)
Delayus();
}
不过,需要指出,虽然这种循环型的延迟函数非常简单,但CPU在运行它时,只能干等着循环的结束,才能再去做其它事。其实,办法是有的,那就是利用定时器更新中断,只不过,这是后面要将的内容了。
使用精准延时函数的跑马灯代码
外部晶振频率为16MHz,将F_master设定为HSE,1分频。
LED_Control是LED串列的控制函数,定义见Drv_GPIO.c。
/**
* @brief Main program.
* @param None
* @retval None
*/
void main(void)
{
CLOCK_HSE(CLK_PRESCALER_CPUDIV1); //HSE=16MHz, F_master=HSE/1
LED_Init(LED1 | LED2 | LED3);
while (1)
{
LED_Control(LED1);
Delay_1ms(1000);
LED_Control(LED2);
Delay_1ms(1000);
LED_Control(LED3);
Delay_1ms(1000);
}
}
史海拾趣
|
子式工具组,工作简单快捷,舒适安全,且一人便可独立完成。工具组主要功用是:①测试制动液的湿沸点,确定是否应该更换。②使用独有的工具进行旧制动液的排放和新制动液的加注。③换液时,工具中采用先进的电子传感显示技术的部件,能准确有效地判 ...… 查看全部问答> |
|
老生常谈:如何学习嵌入式--------希望能给初学者一点帮助 最近不断有学生问我嵌入式很有意思,但是应该如何入手呢?有些学生虽然在指导下做了一些小东西,但事后却往往不知道学到了些什么!只知道似乎很有意思。那么该如何学习嵌入式呢?学习嵌入式需要哪些知识呢?   ...… 查看全部问答> |
|
我现在找了很久ise foundation 10.1或webpack的开发软件,有谁有的可以给我提供以下吗,我在学校,去xilinx网站下要花很大的流量,下不起,图书馆借了个光盘也不能用,哪位好心人能帮我一下,感激涕零啊!邮箱:ffxsppan@163.com… 查看全部问答> |
|
我在工作中使用的测量仪器原本是由PC通过RS232来控制的。现在我需要将这种测量仪器放在工地,PC仍留在室内。请问是否可以使用GPRS或其它无线通信技术来实现?我原本编写的通过RS232端口控制仪器的程序要改写吗?请高手指教,最好能够合作!… 查看全部问答> |




