作者共發了3篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:不轉換▼
 
點擊 回復
383 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)
 

本帖信息

點擊數:383 回複數:2
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-5-14 19:36
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。