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

相关推荐
2603_965148114 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
kaixin_啊啊6 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
xier_ran6 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
Tronlong创龙6 小时前
SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(上)
嵌入式硬件·嵌入式开发·硬件开发·工业控制·工业开发板
巴渝小禹7 小时前
单片机死循环delay_us()计算方法
单片机·嵌入式硬件
Yiran_G7 小时前
LoRa串口模组和SoC模组怎么选?从MCU架构看无线通信方案设计
嵌入式硬件·物联网
HQB20268 小时前
CN6150|简芯维尔 6V/500mA 高速低噪声 CMOS‑LDO 线性稳压器
嵌入式硬件·硬件工程
别动我齐刘海8 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
科芯创展8 小时前
XZ3445 高集成升压/升降压DC-DC电源芯片技术解析
单片机·嵌入式硬件