1.添加基础库
stm 官网下载地址:https://doc.embedfire.com/products/link/zh/latest/mcu/stm32/stm32f103c8t6_core_new1.html
项目参数配置:
Preprocessor Symbols Define 设置参数:
USE_STDPERIPH_DRIVER,USE_STM3210C_EVAL
#需要添加的文件:
mcu 配置:startup_stm32f10x_hd.s
core 配置:Libraries\CMSIS\CM3\CoreSupport 所有文件
inc配置:Libraries\STM32F10x_StdPeriph_Driver\inc 文件夹所有文件
src配置:Libraries\STM32F10x_StdPeriph_Driver\src 文件夹所有文件
eval 配置: Utilities\STM32_EVAL\STM3210C_EVAL 文件夹所有文件
fonts 配置:Utilities\STM32_EVAL\Common\fonts.h 文件
项目配置:Project\STM32F10x_StdPeriph_Examples\SysTick\TimeBase 文件夹下 【stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h,system_stm32f10x.c】
#需要查看的原理图:
【野火STM32F103C8T6核心板双USB款_20241018.zip\1-硬件资料_参考资料_规格手册\原理图_尺寸图_封装库_IO表格_封装库】
STM32F103C8 核心版双USB原理图PDF 文档

主项目源码:
c
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32_eval.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_it.h"
/* Private define ------------------------------------------------------------*/
/*把位带地址+ 位序号转移成别名地址宏*/
#define BITBAND(addr,bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)<<5)+(bitnum<<2))
/*把一个地址转换成一个指针*/
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
/*把位带别名区地址转换成指针*/
#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum))
/*GPIO ODR 和IDR 寄存器地址映射*/
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) // 输入
#define LED_TOGGLE(p,i) {p->ODR ^=i;}
#define SOFT_DELAY Delay(0x0FFFFF)
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for (; nCount != 0; nCount--);
}
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef 类型的结构体*/
GPIO_InitTypeDef GPIO_InitSture;
/*开启LED相关的GPIO外设时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
/*选择要控制的GPIO引脚*/
GPIO_InitSture.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_2;
/*选择引脚模式为通用推挽输出*/
GPIO_InitSture.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitSture.GPIO_Speed = GPIO_Speed_50MHz;
/*设置引脚的速率为50HZ*/
GPIO_Init(GPIOA,&GPIO_InitSture);
GPIO_SetBits(GPIOA,GPIO_Pin_1| GPIO_Pin_2);
}
/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
/*程序来到main 函数之前,启动文件,startup_stm32f10x.hd.s已经调用*/
LED_GPIO_Config();
/*控制寄存器数据,修改LED状态*/
while(1)
{
//PA0 = 0 , 点亮LED
PAout(1) = 0;
SOFT_DELAY;
//PA1 = 1 , 熄灭LED
PAout(1) =1;
SOFT_DELAY;
}
}
相关的参考文档:
https://doc.embedfire.com/mcu/stm32/f103zhinanzhe/std/zh/latest/book/GPIO_bit.html