登录/注册

STM32F100引脚功能打印

STM32F100引脚功能打印

更多

在STM32F100微控制器中,要打印引脚功能信息,通常需要结合芯片参考手册并通过代码读取寄存器状态。以下是实现引脚功能打印的关键步骤和方法:


1. 理解引脚功能配置

STM32F100引脚功能由以下寄存器控制:


2. 打印引脚功能的代码示例

#include "stm32f10x.h"
#include <stdio.h>

// 重定向printf到串口(需提前初始化串口)
int fputc(int ch, FILE *f) {
    USART_SendData(USART1, ch);
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    return ch;
}

void Print_PinConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) {
    uint8_t pin = 0;
    uint32_t cr;

    // 确定引脚在CRL(低8位)或CRH(高8位)
    if (GPIO_Pin < GPIO_Pin_8) {
        cr = GPIOx->CRL;
        pin = (__builtin_ffs(GPIO_Pin) - 1) * 4; // 计算寄存器偏移
    } else {
        cr = GPIOx->CRH;
        pin = (__builtin_ffs(GPIO_Pin >> 8) - 1) * 4;
    }

    // 提取引脚配置位
    uint8_t mode = (cr >> pin) & 0x3;     // 模式位[1:0]
    uint8_t cnf  = (cr >> (pin + 2)) & 0x3; // 配置位[3:2]

    // 打印基本信息
    printf("Pin %s%d: ", (GPIOx == GPIOA) ? "PA" : 
                         (GPIOx == GPIOB) ? "PB" : 
                         (GPIOx == GPIOC) ? "PC" : "PD", 
                         __builtin_ffs(GPIO_Pin) - 1);

    // 解析功能
    if (mode == 0b00) { // 输入模式
        if (cnf == 0b00) printf("模拟输入");
        else if (cnf == 0b01) printf("浮空输入");
        else if (cnf == 0b10) {
            printf("上拉/下拉输入 | ");
            // 检查ODR确定上拉/下拉
            printf(GPIOx->ODR & GPIO_Pin ? "上拉" : "下拉");
        }
    } else { // 输出模式
        const char* modes[] = {"10MHz", "2MHz", "50MHz"};
        printf("输出模式(%s) | ", modes[mode - 1]);

        if (cnf == 0b00)      printf("推挽输出");
        else if (cnf == 0b01) printf("开漏输出");
        else if (cnf == 0b10) printf("复用推挽");
        else if (cnf == 0b11) printf("复用开漏");
    }
    printf("\n");
}

int main(void) {
    // 初始化系统时钟和GPIO
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
    USART_Init(...); // 初始化串口用于printf

    // 打印PA0和PB5功能
    Print_PinConfig(GPIOA, GPIO_Pin_0);
    Print_PinConfig(GPIOB, GPIO_Pin_5);

    while(1);
}

3. 关键功能解析


4. 注意事项

  1. 时钟使能:访问GPIO前需启用RCC_APB2Periph_GPIOx时钟。
  2. 复用功能细节:具体外设功能(如TIM2_CH1、USART1_TX)需查阅《STM32F100xx参考手册》的"Alternate function mapping"章节。
  3. 重映射:若使用AFIO重映射,需额外启用RCC_APB2Periph_AFIO时钟并解析AFIO->MAPR

示例输出

Pin PA0: 浮空输入
Pin PB5: 输出模式(50MHz) | 复用推挽

通过此方法,可动态打印任意引脚的配置状态。实际应用中需结合具体外设需求完善复用功能解析逻辑。

stm32单片机引脚介绍及功能

特点,广泛应用于工业控制、消费电子、医疗设备、智能家居等领域。本文将介绍STM32单片机的引脚及其功能。 1.

2024-09-02 09:38:03

STM32引脚中的BOOT1在哪里

STM32是STMicroelectronics(意法半导体)推出的一系列32位微控制器,广泛应用于嵌入式系统设计。关于STM32的BOOT1引脚

2024-08-22 09:43:42

stm32f100怎样用重映射功能

我用的是stm32f100c8t6b芯片,现在想用将PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,

2024-05-07 06:06:32

100引脚STM32接外部RAM电路原理图

100引脚的STM32接外部RAM电路原理图免费下载。

资料下载 jinyi7016 2022-10-08 14:53:03

STM32F103引脚图下载

STM32F103引脚图免费下载。

资料下载 铁木君 2022-05-09 15:02:49

stm32f103c8t6引脚功能图以及在arduino IDE编程环境下引脚调用

stm32f103c8t6引脚功能图以及在arduino IDE编程环境下引脚

资料下载 佚名 2021-12-28 20:05:43

STM32F407引脚资源总结

STM32F407引脚资源总结定时器 串口 ADC

资料下载 陈文博 2021-12-27 18:54:47

STM32F407引脚分配表资料免费下载

本文档的主要内容详细介绍的是STM32F407引脚分配表资料免费下载

资料下载 死肥宅的好友 2020-04-26 08:00:00

sp3232引脚功能

的功能。 Vcc1和Vcc2引脚:这两个引脚用于供电,通常使用+3.3V或+5V电源。 RIN1和ROUT1

2023-12-19 09:39:30

STM32F103ZET6引脚说明

STM32引脚说明1.以STM32F103ZET6为例144引脚,共有七

2022-02-28 06:29:32

如何对stm32引脚进行配置

stm32引脚配置的总结有很长时间没有具体去看stm32引脚配置了,最近

2022-01-10 07:02:11

浅析STM32F103RCT6引脚功能及使用

STM32F103RCT6引脚的功能有哪些呢?怎样去使用STM32F10

2021-12-14 08:01:07

STM32F407引脚资源大合集,错过绝对后悔

STM32F407引脚资源大合集,错过绝对后悔

2021-12-07 08:05:04

stm32f407引脚功能

stm32f407引脚功能表1 主功能就是

2021-08-09 06:29:21

STM32F407ZGT6引脚名称主功能

STM32F407ZGT6引脚引脚名称主功能默认复用1PE2PE2TRA

2021-08-05 06:36:59
7天热门专题 换一换
相关标签