历史上的今天
今天是:2024年12月16日(星期一)
2020年12月16日 | STM32F7xx —— 输出
2020-12-16 来源:eefocus
一、几个重要的IO口操作函数
HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); // GPIO初始化
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); // 输出高低电平
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); // 读IO口电平
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); // 电平取反
二、几个重要的结构
// GPIO口 GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,GPIOF,GPIOG,GPIOH,GPIOI
typedef struct
{
__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */
__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */
__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */
__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
__IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */
__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */
} GPIO_TypeDef;
// GPIO引脚,模式,上下拉,速度,复用等
typedef struct
{
uint32_t Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
uint32_t Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIO_mode_define */
uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
This parameter can be a value of @ref GPIO_pull_define */
uint32_t Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIO_speed_define */
uint32_t Alternate; /*!< Peripheral to be connected to the selected pins.
This parameter can be a value of @ref GPIO_Alternate_function_selection */
}GPIO_InitTypeDef;
// GPIO引脚
#define GPIO_PIN_0 ((uint16_t)0x0001U) /* Pin 0 selected */
#define GPIO_PIN_1 ((uint16_t)0x0002U) /* Pin 1 selected */
#define GPIO_PIN_2 ((uint16_t)0x0004U) /* Pin 2 selected */
#define GPIO_PIN_3 ((uint16_t)0x0008U) /* Pin 3 selected */
#define GPIO_PIN_4 ((uint16_t)0x0010U) /* Pin 4 selected */
#define GPIO_PIN_5 ((uint16_t)0x0020U) /* Pin 5 selected */
#define GPIO_PIN_6 ((uint16_t)0x0040U) /* Pin 6 selected */
#define GPIO_PIN_7 ((uint16_t)0x0080U) /* Pin 7 selected */
#define GPIO_PIN_8 ((uint16_t)0x0100U) /* Pin 8 selected */
#define GPIO_PIN_9 ((uint16_t)0x0200U) /* Pin 9 selected */
#define GPIO_PIN_10 ((uint16_t)0x0400U) /* Pin 10 selected */
#define GPIO_PIN_11 ((uint16_t)0x0800U) /* Pin 11 selected */
#define GPIO_PIN_12 ((uint16_t)0x1000U) /* Pin 12 selected */
#define GPIO_PIN_13 ((uint16_t)0x2000U) /* Pin 13 selected */
#define GPIO_PIN_14 ((uint16_t)0x4000U) /* Pin 14 selected */
#define GPIO_PIN_15 ((uint16_t)0x8000U) /* Pin 15 selected */
// GPIO模式 输入 推挽输出 开漏输出 推挽复用 开漏复用
#define GPIO_MODE_INPUT ((uint32_t)0x00000000U) /*!< Input Floating Mode */
#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001U) /*!< Output Push Pull Mode */
#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011U) /*!< Output Open Drain Mode */
#define GPIO_MODE_AF_PP ((uint32_t)0x00000002U) /*!< Alternate Function Push Pull Mode */
#define GPIO_MODE_AF_OD ((uint32_t)0x00000012U) /*!< Alternate Function Open Drain Mode */
// GPIO速度 低速 中速 高速 极速
#define GPIO_SPEED_FREQ_LOW ((uint32_t)0x00000000U) /*!< Low speed */
#define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)0x00000001U) /*!< Medium speed */
#define GPIO_SPEED_FREQ_HIGH ((uint32_t)0x00000002U) /*!< Fast speed */
#define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)0x00000003U) /*!< High speed */
// GPIO上下拉 无上下拉 上拉 下拉
#define GPIO_NOPULL ((uint32_t)0x00000000U) /*!< No Pull-up or Pull-down activation */
#define GPIO_PULLUP ((uint32_t)0x00000001U) /*!< Pull-up activation */
#define GPIO_PULLDOWN ((uint32_t)0x00000002U) /*!< Pull-down activation */
// GPIO引脚高低电平
typedef enum
{
GPIO_PIN_RESET = 0,
GPIO_PIN_SET
}GPIO_PinState;
三、封装两个GPIO初始化函数(普通GPIO,复用GPIO)
// 这里只贴出代码片段,封装两个接口,一个普通GPIO初始化,一个带复用功能。
#define GPIO_CLK_ENABLE() do{
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
} while(0);
void GPIOConfig(GPIO_TypeDef *gpio, uint32_t pin, uint32_t mode, uint32_t pull)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_CLK_ENABLE();
GPIO_InitStructure.Pin = pin;
GPIO_InitStructure.Mode = mode;
GPIO_InitStructure.Pull = pull;
GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(gpio, &GPIO_InitStructure);
}
void GPIOConfigExt(GPIO_TypeDef *gpio, uint32_t pin, uint32_t mode, uint32_t pull, uint32_t alternate)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_CLK_ENABLE();
GPIO_InitStructure.Pin = pin;
GPIO_InitStructure.Mode = mode;
GPIO_InitStructure.Pull = pull;
GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
GPIO_InitStructure.Alternate = alternate;
HAL_GPIO_Init(gpio, &GPIO_InitStructure);
}
四、输出接口设计
为了灵活使用,我们将输出的有效电平设置成可配置。
// 配置的有效电平 初始 低电平有效 高电平有效
typedef enum
{
OUTPUT_INIT_IS_ACTIVE = 0,
OUTPUT_LOW_IS_ACTIVE = 1,
OUTPUT_HIGH_IS_ACTIVE = 2,
} output_active_t;
#define OUTX_CONFIG(gpio, pin) GPIOConfig(gpio, pin, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL)
#define OUTX_READ(gpio, pin) HAL_GPIO_ReadPin(gpio, pin)
#define OUTX_ACTIVE(gpio, pin, tag) do{
if(OUTPUT_LOW_IS_ACTIVE == tag)
{
HAL_GPIO_WritePin(gpio, pin, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(gpio, pin, GPIO_PIN_SET);
}
} while(0);
#define OUTX_NEGATIVE(gpio, pin, tag) do{
if(OUTPUT_LOW_IS_ACTIVE == tag)
{
HAL_GPIO_WritePin(gpio, pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(gpio, pin, GPIO_PIN_RESET);
}
} while(0);
#define OUT1_PORT GPIOA
#define OUT1_PIN GPIO_PIN_0
史海拾趣
|
DCR022405P的技术参数 产品型号:DCR022405P 输出电压最小值(V):4.900 输出电压最大值(V):5.100 容限(%):2 输出电流(mA):400 输入电压最小值(V):21.600 输入电压最大值(V):26.400 效率典型值(%):- 静态电流典型值(mA):15 开关频率最大值( ...… 查看全部问答> |
|
采用wm5.0 sdk开发wm5的程序,开发环境为visual studio.net 2005,如果采用单文档编写的界面,则程序运行时点击窗口右上角的关闭按钮,则窗口隐藏,然后通过其他任务管理软件可以重新激活重新激活该窗口,但是果果采用的是对话框编写的界面,则程序 ...… 查看全部问答> |
|
谁有此文件,能传给我一个么? 据说这个文件在 platform builder里有,一般的sdk里不包含, 可是连platform builder的下载都很难找 请发到 yuedong_2008@hotmail.com 谢谢 … 查看全部问答> |
|
全国硬件工程师实训基地系信息产业部电子教育与考试中心指定的硬件工程师独家教育机构,有着多年的IT业培训经验,与诸多IT企业有着密切联系,经过两年多的精心策划特推出PCB设计工程师,单片机设计工程师,嵌入式系统工程师职业培训,详情请百度搜索\" ...… 查看全部问答> |
|
Fitel/Furukawa Fusion Splicer (S 183PM) 我想问我能去哪里买到以下的产品? a)MSK 4200, 75 Volt 5A H Bridge PWM Motor Driver/Amplifier MSK ( M.S. Kennedy Corp) 100 pcs b)MSK 4203, 75 Volt 10A H Bridge PWM Motor Driver/Amplifier MSK ( M.S. Kennedy Corp) 100 pcs c)Fitel/ ...… 查看全部问答> |
|
中断的过程是这样的吧: 硬件设备发生中断时,ISR会禁止同级和低级中断,然后根据IRQ返回关联的SysIntr,内核根据ISR返回的SysIntr唤醒相应的IST(SysIntr与IST创建的Event关联),IST处理中断之后调用InterruptDone解除中断禁止。 那是不是说在 ...… 查看全部问答> |
|
在汽车上采用将蓄电池负极与车身的金属部分相连接,因此汽车上的负极导线通常称为搭铁线。搭铁线在汽车电路中起着重要的作用,因此搭铁状态的好坏是汽车电器工作好坏的关键。在修理工作中,查找搭铁不良故障,一般都要耗费大量的时间诊断。本文介绍 ...… 查看全部问答> |




