STM32F103C8-GPIO—位带操作学习

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

相关推荐
迷路爸爸1801 小时前
Claude Code 核心设计学习记录
学习·microsoft·agent·智能体·multi-agent·claude code
zlinear数据采集卡2 小时前
D223的DDS信号发生器:10000点查找表与4通道16位DAC波形输出
arm开发·嵌入式硬件·fpga开发·开源
捷瑞电子工坊12 小时前
嵌入式秋招面经:5大核心模块高频考题与实战避坑总结
c语言·stm32·嵌入式工程师·rtos·通信协议·嵌入式面试
大爱编程♡13 小时前
GPIO-I2C
stm32·单片机·嵌入式硬件
蒸蒸yyyyzwd14 小时前
秋招不熟悉力扣学习笔记1
笔记·学习·leetcode
振南的单片机世界15 小时前
PVD掉电中断——让单片机“咽气前”写完遗书
arm开发·stm32·单片机·嵌入式硬件
小弥儿15 小时前
GitHub今日热榜 | 2026-08-11:图原生基础设施首日登顶
学习·开源·github
续写烂尾17 小时前
SD NAND存储实测:正点原子STM32精英板SDIO读写验证全流程
stm32·单片机·嵌入式硬件
for_ever_love__18 小时前
python基础语法学习: 数据容器
windows·python·学习