野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8174|回复: 4

按照《STM32库开发实战指南》第7章实例,无法点亮LED

[复制链接]
发表于 2022-3-13 20:27:57 | 显示全部楼层 |阅读模式
代码如下:
main.c文件代码:

#include "stm32f10x.h"

void SystemInit(void)
{
}

int main(void)
{
        //开启GPIOB 端口时钟
        RCC_APB2ENR |= ((1)<<3);
       
        //清空控制PB0的端口位
        GPIOB_CRL &= ~(0x0F << (4*0));
       
        //配置PB0为通用推挽输出 ,速度为10M
        GPIOB_CRL |= (1<<(4*0));
       
        //PB0输出为低电平
        GPIOB_ODR |= (0<<0);

                while(1);
}

stm32f10x.h文件代码:

        #define PERIPH_BASE ((unsigned int)0x40000000)
               
        #define APB1PERIPH_BASE         PERIPH_BASE
        #define APB2PERIPH_BASE         PERIPH_BASE + 0x00010000
        #define AHBPERIPH_BASE                 PERIPH_BASE + 0x00020000
       
        #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
        #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
       
        #define GPIOB_CRL         *(unsigned int*)(GPIOB_BASE+0x00)
        #define GPIOB_CRH         *(unsigned int*)(GPIOB_BASE+0x04)
        #define GPIOB_IDR         *(unsigned int*)(GPIOB_BASE+0x08)
        #define GPIOB_ODR         *(unsigned int*)(GPIOB_BASE+0x0c)
        #define GPIOB_BSRR  *(unsigned int*)(GPIOB_BASE+0x10)
        #define GPIOB_BRR         *(unsigned int*)(GPIOB_BASE+0x14)
        #define GPIOB_LCKR         *(unsigned int*)(GPIOB_BASE+0x18)
               
        #define RCC_BASE (AHBPERIPH_BASE + 0x1000)
       
        #define RCC_APB2ENR        *(unsigned int*)(RCC_BASE+0x18)
               


startup_stm32f10x_hd.s 这个文件是从固件库里拷过来的


下载到板子里后无法点亮,
开发板使用的是stm32f103c8t6
大家遇见过吗??


回复

使用道具 举报

发表于 2022-3-14 10:26:30 | 显示全部楼层
不太懂。
PB0输出为低电平应该这么写,不过这个应该不影响你目前的结果
        GPIOB_ODR &=~ (1<<0);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-14 21:55:21 | 显示全部楼层
ID-fHtdZc 发表于 2022-3-14 10:26
不太懂。
PB0输出为低电平应该这么写,不过这个应该不影响你目前的结果
        GPIOB_ODR &=~ (1 ...

新手,刚开始学,以上代码是按照书上敲的。
今天百度了下,找到原因了,stm32fl03c8t6上接LED的是PC13, 得使用GPIOC,选择高位GPIOC_CRH寄存器控制才行。
以下是main.c的代码:
int main(void)
{
        //开启GPIOB 端口时钟
        RCC_APB2ENR |= (1<<4);
       
        //清空控制PB0的端口位
        GPIOC_CRH &= ~(0x0F << (4*5));
       
        //配置PB0为通用推挽输出 ,速度为10M
        GPIOC_CRH |= (1<<4*5);
       
        //PB0输出为低电平
        GPIOC_ODR &= ~(1<<13);

        while(1);
}

已经点亮了
回复 支持 反对

使用道具 举报

发表于 2022-3-15 15:35:19 | 显示全部楼层
                    赞!
回复 支持 反对

使用道具 举报

发表于 2023-10-4 14:10:20 | 显示全部楼层
咨询一下,为什么要先清零端口?看老师讲的视频没有这一步啊,也能亮灯。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-30 18:08 , Processed in 0.030047 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表