打印
[STM32F1]

stm32(F103c8t6)自学笔记

[复制链接]
楼主: t60yz
手机看帖
扫描二维码
随时随地手机跟帖
21
t60yz|  楼主 | 2023-11-21 16:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
成为这样
        这里注意:上图中的md.s后缀文件是根据单片机型号选择的,参考下图

使用特权

评论回复
22
t60yz|  楼主 | 2023-11-21 16:07 | 只看该作者
建立用户文件夹User

        创建main.c

使用特权

评论回复
23
t60yz|  楼主 | 2023-11-21 16:07 | 只看该作者
3.完成

使用特权

评论回复
24
t60yz|  楼主 | 2023-11-21 16:07 | 只看该作者
2.1.1 寄存器开发模式下实现点亮LED(GPIO13)
1.首先打开RCC寄存器的APB2使能GPIOC的时钟

使用特权

评论回复
25
t60yz|  楼主 | 2023-11-21 16:07 | 只看该作者
2.再配置对应的GPIOC的模式

使用特权

评论回复
26
t60yz|  楼主 | 2023-11-21 16:08 | 只看该作者
3.再写入该GPIOC的输出数据

        灯是低电平点亮,高电平熄灭

使用特权

评论回复
27
t60yz|  楼主 | 2023-11-21 16:08 | 只看该作者
4.完成

使用特权

评论回复
28
t60yz|  楼主 | 2023-11-21 16:08 | 只看该作者
5.总结收获

通过该方法配置很繁琐,且每次配置会影响其它IO口的数据,只能通过像单片机中的&=、|=来解决,更麻烦。

使用特权

评论回复
29
t60yz|  楼主 | 2023-11-21 16:08 | 只看该作者
2.2 配置成标准库开发模式(工程)(详细步骤)
1.在寄存器开发模板的基础上,新建Lirary文件夹,导入c文件、头文件

使用特权

评论回复
30
t60yz|  楼主 | 2023-11-21 16:08 | 只看该作者

使用特权

评论回复
31
t60yz|  楼主 | 2023-11-21 16:09 | 只看该作者
    全部粘贴到刚建立的文件夹Library

使用特权

评论回复
32
t60yz|  楼主 | 2023-11-21 16:09 | 只看该作者
     将这三个粘贴到User文件夹(下面需要在Keil里配置路径)

使用特权

评论回复
33
t60yz|  楼主 | 2023-11-21 16:09 | 只看该作者
2.在Keil里添加上述文件,配置Keil

使用特权

评论回复
34
t60yz|  楼主 | 2023-11-21 16:09 | 只看该作者
一定要定义 USE_STDPERIPH_DRIVER

        USE使用、下划线、STD标准、PERIPH外设、下划线、DRIVER驱动

使用特权

评论回复
35
t60yz|  楼主 | 2023-11-21 16:10 | 只看该作者
3.完成!

编译0错误0警告

使用特权

评论回复
36
t60yz|  楼主 | 2023-11-21 16:10 | 只看该作者
2.2.1 标准库开发模式下实现点亮LED(GPIO13)
配置思路和配置库函数一样,不同在于不用查手册看具体位以及担心改变其它位的数据了

操作流程还是一样的

使用特权

评论回复
37
t60yz|  楼主 | 2023-11-21 16:10 | 只看该作者
1.使能RCC寄存器控制的APB2总线上的外设IO时钟

使用特权

评论回复
38
t60yz|  楼主 | 2023-11-21 16:10 | 只看该作者
2.配置目标外设的模式

        这里注意:由于库函数定义的GPIO_Init函数需要传入一个结构体变量的地址,这里是将需要配置的 Pin口、Speed传输速度、Mode输出模式 三个封装在了结构体里以此简化了代码。我们调用前必须要先自定义该结构体类型的变量。

使用特权

评论回复
39
t60yz|  楼主 | 2023-11-21 16:10 | 只看该作者
3.配置GPIOC_Pin口输出的数据

    GPIO_SetBits (GPIOC,GPIO_Pin_13);  //输出高电平(熄灭)
    GPIO_ResetBits (GPIOC,GPIO_Pin_13);  //输出低电平(点亮)

使用特权

评论回复
40
t60yz|  楼主 | 2023-11-21 16:10 | 只看该作者
#include "stm32f10x.h"                  // Device header


int main(void)
{
//        RCC->APB2ENR = 0X00000010;  //配置寄存器实现点灯
//        GPIOC->CRH = 0X00300000;
//        GPIOC->ODR = 0X00000000;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC时钟
        GPIO_InitTypeDef GPIO_InitStruct;  //定义的结构体
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //输出模式
        GPIO_InitStruct .GPIO_Pin = GPIO_Pin_13;  //输出IO口
        GPIO_InitStruct .GPIO_Speed = GPIO_Speed_50MHz;  //输出速度
        GPIO_Init(GPIOC,&GPIO_InitStruct);  //配置GPIOC的模式,这里将三种模式放在了一个结构体内,因此要在上面定义一个结构体
        //GPIO_SetBits (GPIOC,GPIO_Pin_13);  //输出高电平(熄灭)
        GPIO_ResetBits (GPIOC,GPIO_Pin_13);  //输出低电平(点亮)
        while(1)
        {
               
        }
}

使用特权

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

本版积分规则