打印
[STM32F1]

STM32F10X入门——流水灯

[复制链接]
236|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvuu|  楼主 | 2023-5-27 11:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
主要的库函数位置

    /core_cm32.c/stdin.h 中定义了字符型
    stm32f10x.h>stm32f10x_conf.h 中定义了引用的外设头文件
    库文件之间的依赖调用关系 @./~.PNG
    stm32f10x.h查看地址映射
        比如 define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)

GPIO使用步骤

    配置寄存器:选定 GPIO 的特定功能 ,最基本的如:选择作为输入还是输出端口。
    数据寄存器:保存了 GPIO 的输入电平或将要输出的电平
    位控制寄存器:设置某引脚数据为 1 或 0 ,控制输出电平

    锁定寄存器:设置某锁定引脚后,就不能修改其配置
    一般使用推挽输出模式

    GPIO_TyPe_Def结构体中定义了GPIO_BASED的偏移量

RCC等时钟相关

    SYSCLK为系统时钟
    2.

使用特权

评论回复
评论
lvuu 2023-5-27 11:12 回复TA
———————————————— 版权声明:本文为CSDN博主「Raphael620」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cyan_canopus/article/details/88601325 
沙发
lvuu|  楼主 | 2023-5-27 11:14 | 只看该作者

void LED_GPIO_Config(void){
    /*定义一个 GPIO_InitTypeDef 类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
    /*开启 GPIOC 的外设时钟,emable即使能*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
    /*选择要控制的 GPIOC 引脚 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 ;
    /*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    /*设置引脚速率为 70MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_70MHz;
    /*调用库函数,初始化 GPIOC*/
GPIO_Init(GPIOC, &GPIO_InitStructure);
    /* 初始关闭所有 led 灯,Reset 为低电平*/
GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);}

使用特权

评论回复
板凳
lvuu|  楼主 | 2023-5-27 11:14 | 只看该作者
.h文件编写规范

以 led.h 文件为例

    条件编译,防止头文件重复,最好加上
#ifndef __LED_H 
#define __LED_H

#endif

使用特权

评论回复
地板
lvuu|  楼主 | 2023-5-27 11:14 | 只看该作者
    引用头文件 #include "stm32f10x.h"
    定义宏
#define ON  0
#define OFF 1

使用特权

评论回复
5
lvuu|  楼主 | 2023-5-27 11:14 | 只看该作者
定义带参宏以及声明对应 led.c 中的函数
#define LED1(a) if (a)  \
   GPIO_SetBits(GPIOC,GPIO_Pin_3);\
else        \
   GPIO_ResetBits(GPIOC,GPIO_Pin_3)
void LED_GPIO_Config(void);

使用特权

评论回复
6
lvuu|  楼主 | 2023-5-27 11:15 | 只看该作者
main文件编写

    头文件引用
#include "stm32f10x.h"
#include "led.h"

使用特权

评论回复
7
lvuu|  楼主 | 2023-5-27 11:15 | 只看该作者
    声明后续函数

void Delay(__IO u32 nCount);

使用特权

评论回复
8
lvuu|  楼主 | 2023-5-27 11:15 | 只看该作者
main函数编写
int main(void)
{   
    /* LED 端口初始化 */
    LED_GPIO_Config();

    while (1)
    {
        LED1( ON );              // 亮
        Delay(0x0FFFEF);
        LED1( OFF );          // 灭
        
        LED2( ON );
        Delay(0x0FFFEF);
        LED2( OFF );         
   
    }
}

使用特权

评论回复
9
lvuu|  楼主 | 2023-5-27 11:15 | 只看该作者
delay函数编写
void Delay(__IO u32 nCount)     //简单的延时函数
{
    for(; nCount != 0; nCount--);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

468

帖子

0

粉丝