目前共有3篇帖子。 内容转换:不转换▼
 
点击 回复
216 2
【STM32入门级程序6】使用库函数实现流水灯
一派护法 十九级
1楼 发表于:2016-5-14 19:23
关于如何新建使用标准固件库的工程,请参阅:https://zh.arslanbar.net/post.php?t=24015

【程序代码——main.c】
#include <stm32f10x.h>

void delay()
{
    uint32_t i;
    for (i = 0; i < 2000000; i++);
}

int main(void)
{
    GPIO_InitTypeDef init;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    init.GPIO_Pin = GPIO_Pin_All;
    init.GPIO_Speed = GPIO_Speed_50MHz;
    init.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &init);

    while (1)
    {
        GPIOB->ODR = 0x100;
        do
        {
            delay();
            GPIOB->ODR <<= 1;
        } while (GPIOB->ODR); // 只要PB中有1位为1, 循环就继续进行
    }
}

一派护法 十九级
2楼 发表于:2016-5-14 19:28
在这个程序中,I/O口的操作还是通过ODR寄存器进行的。只不过在初始化I/O口时使用的是库函数而不是寄存器。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
这句话的作用是开启PB上的时钟。这个相当于之前的RCC->APB2ENR |= _BV(3);。

GPIO_InitTypeDef是一个结构体类型,GPIO_Init函数根据该结构体中的各成员变量初始化指定的I/O口。GPIO_Pin_All表示将该端口的所有I/O口都初始化,GPIO_Speed用于指定端口的输出速率,这里是50MHz(注意大小写)。GPIO_Mode用于设置工作状态,GPIO_Mode_Out_PP表示推挽输出。
一派护法 十九级
3楼 发表于:2016-5-14 19:36
使用标准固件库开发STM32程序时,头文件不用改变,只需要复制库中4个文件夹的文件到工程中(见下图),再进行一些工程配置即可。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:216 回复数:2
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-5-14 19:36
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。