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

相关推荐
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
俊基科技4 小时前
A-59U工业级多模语音处理模块在矿山矿井通信与呼叫报警系统中的应用
嵌入式硬件·嵌入式开发·硬件开发·ai降噪·回音消除·拾音降噪
yi.Ist4 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
周周记笔记5 小时前
GD32F450xx MCU Datasheet 解读:硬件测试工程师的测试方法论
单片机·嵌入式硬件
骐骥18 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦8 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
AOI小白新手上路9 小时前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
HUI-4749 小时前
EG1135|SSOP‑16 同步整流降压控制器,大功率外置 MOS 降压优选
单片机·嵌入式硬件·硬件工程
单片机仿真设计10 小时前
【proteus仿真】基于 STM32 单片机恒温箱控制系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
m4Rk_10 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github