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

相关推荐
视觉小萌新18 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
Zw-awa20 小时前
从 CPU 搬运到自动搬运:DMA、空闲中断和两块缓冲
stm32
yyyang8821 小时前
蓝牙系统整体架构详解
学习·信息与通信
无敌贵点大王21 小时前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何21 小时前
二进制和十六进制
stm32·单片机
Linux-lucky21 小时前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
国科安芯1 天前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
TST-魚爷1 天前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
金色光环1 天前
【DSP学习】C2000_ADC中断_笔记
笔记·学习
Дерек的学习记录1 天前
Unreal Engine 5:第三人称运动系统和人物动画
开发语言·学习·ue5