数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 797|回复: 25

[STM] 玩玩单片机,STM32F103C8T6亮灯。

[复制链接]
发表于 2025-6-25 19:29:46 | 显示全部楼层 |阅读模式

没有通电,灯没有亮,




通电,指示灯亮,


成功点亮板上的灯,


开发板上没有焊针脚,也没有面包板等等配套,心比老人家还要急,发光管直接插在板上。



LED灯被点亮、、、、鸟。

谢谢欣赏。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +30 收起 理由
azzajazz + 30

查看全部打赏

发表于 2025-6-25 19:41:42 来自手机浏览器 | 显示全部楼层
下一个题目。请把主控芯片点亮
回复 支持 反对

使用道具 举报

发表于 2025-6-25 19:48:55 | 显示全部楼层
可以把程序贴上来吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-25 20:10:01 | 显示全部楼层
猪小呆 发表于 2025-6-25 19:48
可以把程序贴上来吗?

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        while (1)
        {
                GPIO_ResetBits(GPIOA, GPIO_Pin_0);
                Delay_ms(500);
                GPIO_SetBits(GPIOA, GPIO_Pin_0);
                Delay_ms(500);
               
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
                Delay_ms(500);
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
                Delay_ms(500);
               
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
                Delay_ms(500);
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
                Delay_ms(500);
        }
}

LED闪灯,发光管接+3.3V,A0脚。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-25 20:11:30 | 显示全部楼层
猪小呆 发表于 2025-6-25 19:48
可以把程序贴上来吗?

不许笑,偷回来的,
回复 支持 反对

使用道具 举报

发表于 2025-6-25 20:16:39 | 显示全部楼层
开心的果 发表于 2025-6-25 20:11
不许笑,偷回来的,

看不懂,太难了,可以加上注释吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-25 20:32:28 | 显示全部楼层
猪小呆 发表于 2025-6-25 20:16
看不懂,太难了,可以加上注释吗?

抄回的,我没有水平帮你加上注释的
回复 支持 反对

使用道具 举报

发表于 2025-6-25 21:14:41 | 显示全部楼层
开心的果 发表于 2025-6-25 20:10
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

好腻害的样子
回复 支持 反对

使用道具 举报

发表于 2025-6-25 21:35:10 | 显示全部楼层
3种方式点灯啊
回复 支持 反对

使用道具 举报

发表于 2025-6-26 08:22:56 | 显示全部楼层
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
回复 支持 反对

使用道具 举报

发表于 2025-6-26 08:26:01 | 显示全部楼层
入门第一件事:点亮一个LED灯;
回复 支持 反对

使用道具 举报

发表于 2025-6-26 08:26:26 | 显示全部楼层
接下来就该弄个流水灯了
回复 支持 反对

使用道具 举报

发表于 2025-6-26 10:08:27 | 显示全部楼层
点灯往往是第一个测试程序,下一步准备做什么呢?
回复 支持 反对

使用道具 举报

发表于 2025-6-26 11:15:19 来自手机浏览器 | 显示全部楼层
lmn2005 发表于 2025-6-26 10:08
点灯往往是第一个测试程序,下一步准备做什么呢?

103c8t6可以做DAP仿真器
回复 支持 反对

使用道具 举报

发表于 2025-6-26 11:33:00 | 显示全部楼层
“高级”单片机运行需要有漂亮的代码来驱动才够面子。
以下是我自己对代码的简单理解,也请高手指正。
I/O口A的第0个引脚的配置:
1.配置运行时钟:              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
         
2.以下操作配置端口:       GPIO_InitTypeDef GPIO_InitStructure;
3.端口工作模式配置:       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
4. 指定端口的具体引脚:   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
5.配置端口工作速度:       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
6.指定所配置的端口:       GPIO_Init(GPIOA, &GPIO_InitStructure);

如果用STC单片机来控制时:
1.指定端口引脚:
sibt LED=P1^0;
2.配置引脚工作模式:   
P1M0 = 0x01;
P1M1 = 0x00; //P1.0推挽输出
3.没有了。



回复 支持 反对

使用道具 举报

发表于 2025-6-26 12:02:52 | 显示全部楼层
开心的果 发表于 2025-6-25 20:32
抄回的,我没有水平帮你加上注释的

chatgpt加注释:
  1. #include "stm32f10x.h"                  // 包含STM32F10x系列的外设头文件
  2. #include "Delay.h"                      // 包含延时函数头文件

  3. int main(void)
  4. {
  5.         // 1. 使能GPIOA端口的时钟
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  7.       
  8.         // 2. 配置GPIOA的第0号引脚为推挽输出模式,速度为50MHz
  9.         GPIO_InitTypeDef GPIO_InitStructure;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      // 推挽输出
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;             // 选择PA0引脚
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     // 输出速度50MHz
  13.         GPIO_Init(GPIOA, &GPIO_InitStructure);                // 初始化GPIOA.0
  14.       
  15.         // 3. 主循环,循环点亮和熄灭LED(假设PA0接LED)
  16.         while (1)
  17.         {
  18.                 // 方法1:使用GPIO_ResetBits和GPIO_SetBits控制引脚
  19.                 GPIO_ResetBits(GPIOA, GPIO_Pin_0);    // PA0输出低电平(LED亮/灭取决于接法)
  20.                 Delay_ms(500);                        // 延时500ms
  21.                 GPIO_SetBits(GPIOA, GPIO_Pin_0);      // PA0输出高电平
  22.                 Delay_ms(500);                        // 延时500ms
  23.                
  24.                 // 方法2:使用GPIO_WriteBit控制引脚
  25.                 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // PA0输出低电平
  26.                 Delay_ms(500);                              // 延时500ms
  27.                 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);  // PA0输出高电平
  28.                 Delay_ms(500);                              // 延时500ms
  29.                
  30.                 // 方法3:直接用0/1强制类型转换控制引脚
  31.                 GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); // PA0输出低电平
  32.                 Delay_ms(500);                                  // 延时500ms
  33.                 GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1); // PA0输出高电平
  34.                 Delay_ms(500);                                  // 延时500ms
  35.         }
  36. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2025-6-26 12:14:00 | 显示全部楼层
595953427@qq 发表于 2025-6-26 11:15
103c8t6可以做DAP仿真器

做DAP仿真器可以直接下载一个固件就完成了,不会也自己把源代码一句一句地研读再完善吧?
回复 支持 反对

使用道具 举报

发表于 2025-6-26 12:15:41 | 显示全部楼层
本帖最后由 猪小呆 于 2025-6-26 12:17 编辑

让CHATGPT写一个点灯程序,只使用最底层的寄存器,不使用库函数,你能看出跟你那个程序的区别吗?
当然可以!下面是一个基于STM32F103C8T6的点灯程序,只用寄存器操作,不依赖任何库函数。假设LED接在PA0引脚上。
  1. #include "stm32f10x.h"  // 仅用于寄存器定义,可省略

  2. // 简单的延时函数(不精确,仅用于演示)
  3. void delay_ms(unsigned int ms)
  4. {
  5.     unsigned int i, j;
  6.     for(i = 0; i < ms; i++)
  7.         for(j = 0; j < 8000; j++); // 8MHz主频时大致1ms
  8. }

  9. int main(void)
  10. {
  11.     // 1. 使能GPIOA时钟 (RCC_APB2ENR的第2位)
  12.     RCC->APB2ENR |= (1 << 2);

  13.     // 2. 配置PA0为推挽输出
  14.     // 先清零PA0的配置(CRL的[3:0]位)
  15.     GPIOA->CRL &= ~(0xF << 0);      // 清零PA0的4位
  16.     GPIOA->CRL |=  (0x1 << 0);      // MODE0 = 01 (输出模式,最大10MHz)
  17.     // GPIOA->CRL |=  (0x2 << 0);   // MODE0 = 10 (输出模式,最大2MHz)
  18.     // GPIOA->CRL |=  (0x3 << 0);   // MODE0 = 11 (输出模式,最大50MHz)
  19.     GPIOA->CRL |=  (0x0 << 2);      // CNF0  = 00 (通用推挽输出)

  20.     // 3. 主循环,点亮和熄灭LED
  21.     while(1)
  22.     {
  23.         GPIOA->BSRR = (1 << 0);     // PA0置1,点亮LED
  24.         delay_ms(500);

  25.         GPIOA->BRR  = (1 << 0);     // PA0清0,熄灭LED
  26.         delay_ms(500);
  27.     }
  28. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2025-6-26 12:25:15 | 显示全部楼层
再来一个claude3.7写的,跟chatgpt写的区别在哪里你能看出来吗?你能理解这些区别,那单片机对你来说就很简单了
  1. #include <stdint.h>

  2. // 定义寄存器地址
  3. #define RCC_BASE            0x40021000
  4. #define RCC_APB2ENR         *(volatile uint32_t *)(RCC_BASE + 0x18)

  5. #define GPIOA_BASE          0x40010800
  6. #define GPIOA_CRL           *(volatile uint32_t *)(GPIOA_BASE + 0x00)
  7. #define GPIOA_ODR           *(volatile uint32_t *)(GPIOA_BASE + 0x0C)

  8. // 定义位操作
  9. #define RCC_APB2ENR_IOPAEN  (1 << 2)    // GPIOA时钟使能位
  10. #define LED_PIN             0           // PA0引脚

  11. // 延时函数
  12. void Delay_ms(uint32_t ms)
  13. {
  14.     uint32_t i, j;
  15.     for(i = 0; i < ms; i++)
  16.         for(j = 0; j < 12000; j++);    // 根据实际时钟频率调整此值
  17. }

  18. int main(void)
  19. {
  20.     // 使能GPIOA时钟
  21.     RCC_APB2ENR |= RCC_APB2ENR_IOPAEN;
  22.    
  23.     // 配置PA0为推挽输出,最大速度50MHz
  24.     // 清除PA0的配置位
  25.     GPIOA_CRL &= ~(0xF << (LED_PIN * 4));
  26.     // 设置PA0为推挽输出,50MHz (0011)
  27.     GPIOA_CRL |= (0x3 << (LED_PIN * 4));
  28.    
  29.     while(1)
  30.     {
  31.         // 点亮LED (PA0输出低电平,假设LED是低电平点亮)
  32.         GPIOA_ODR &= ~(1 << LED_PIN);
  33.         Delay_ms(500);
  34.         
  35.         // 熄灭LED (PA0输出高电平)
  36.         GPIOA_ODR |= (1 << LED_PIN);
  37.         Delay_ms(500);
  38.     }
  39. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-23 05:31 , Processed in 0.468001 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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