单片机学习小组
直播中

俞舟群

7年用户 1064经验值
擅长:可编程逻辑 电源/新能源
私信 关注

怎样使用STM32F103C8T6微控制器去点亮LED灯呢

STM32F103C8T6是什么呢?
怎样使用STM32F103C8T6微控制器去点亮LED灯呢?点亮LED灯需要哪几个步骤?

回帖(2)

王璨

2022-2-24 11:28:03
一、STM32F103C8T6简介

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。
二、点灯


点亮LED灯,需要用到GPIO端口。
为了点亮LED灯,需要三个步骤:


  • 打开GPIO口的时钟
  • 初始化GPIO口(选择推挽输出)
  • 设置低电平

(一)打开时钟



  • GPIO的地址:


  • 时钟的地址:





即0x40021018,则打开三个IO口的时钟需要将三个位都置1:

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

// 打开时钟
RCC_APB2ENR |= (1<<3);  // 打开 GPIOB 时钟
RCC_APB2ENR |= (1<<4);  // 打开 GPIOC 时钟
RCC_APB2ENR |= (1<<2);  // 打开 GPIOA 时钟

三、keil创建项目

1.新建uVision项目



2.选择合适位置命名保存



3.芯片选择STM32F103下的STM32F103C8





4.把startup_stm32f10x_md.s文件复制粘贴到刚才创建项目文件目录下,一般位于野火【STM32F103C8T6-核心板】资料/3-USART1接发/Libraries/CMSIS/startup/目录下





5.引入startup_stm32f10x_md.s





6.新建main.c文件





7.main.c代码

#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)

#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)
      


void SystemInit(void);
void Delay_ms(volatile  unsigned  int);

void Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}


int main(){

        RCC_APB2ENR |= (1<<3);
        RCC_APB2ENR |= (1<<4);
        RCC_APB2ENR |= (1<<2);
      
      
      

        GPIOB_CRL |= (1<<0);
        GPIOB_CRL &= ~(0xE);  
      
        GPIOC_CRH |= (1<<28);
        GPIOC_CRH &= ~(0xE0000000);  
      
        GPIOA_CRL |= (1<<0);  
        GPIOA_CRL &= ~(0xE);  

        GPIOB_ODR |= (1<<0);  
        GPIOC_ODR |= (1<<15);
        GPIOA_ODR |= (1<<0);  
      
      
        while(1){
                GPIOB_ODR &= ~(1<<0);
                Delay_ms(1000000);
                GPIOB_ODR |= (1<<0);
                Delay_ms(1000000);
               
                GPIOC_ODR &= ~(1<<15);
                Delay_ms(1000000);
                GPIOC_ODR |= (1<<15);  
                Delay_ms(1000000);
               
                GPIOA_ODR &= ~(1<<0);
                Delay_ms(1000000);
                GPIOA_ODR |= (1<<0);  
                Delay_ms(1000000);
               
        }
      
}

void SystemInit(){
      
}
四、连接威廉希尔官方网站


对于USB转TTL模块和stm32f103c8t6连接



GND — GND
3v3 — 3v3
TXD — A10
RXD — A9

五、编译烧录代码

(一)编译


1.选择Create hex文件





2.bulid生成.hex文件



3.生成成功



(二)烧录准备工作


1,下载CH341SerSetup.exe,并用管理员权限安装,加载USB串口驱动



2.下载FlyMcu.exe中其中一个方便烧录




(三)烧录程序


用FlyMcu进行烧录





(四)结果


七、总结


通过此次实验,我对stm32芯片各个串口输入输出,工作原理、寄存器地址等有了一定了解,编译实验过程中出现了多次困难,但都在室友的帮助和自己查阅资料下解决了。
举报

关睿

2022-2-24 11:28:04
1
举报

更多回帖

发帖
×
20
完善资料,
赚取积分