深圳网站设计公司行业wordpress抓取公众号文章

张小明 2026/1/2 19:13:04
深圳网站设计公司行业,wordpress抓取公众号文章,福建人力资源建设网站,东莞大型网站建设公司这篇文章是 STM32F10x系列 GPIO 外设的寄存器定义和操作函数。头文件stm32f10x.h 定义了 GPIO 和 RCC 外设的寄存器结构体、基地址映射、引脚编号枚举以及工作模式/速度配置类型。stm32f10x_gpio.h 声明了三个关键函数#xff1a;GPIO_SetBits/ResetBits 用于控制引脚输出电平…这篇文章是 STM32F10x系列 GPIO 外设的寄存器定义和操作函数。头文件stm32f10x.h定义了 GPIO 和 RCC 外设的寄存器结构体、基地址映射、引脚编号枚举以及工作模式/速度配置类型。stm32f10x_gpio.h声明了三个关键函数GPIO_SetBits/ResetBits用于控制引脚输出电平GPIO_Init函数实现引脚模式初始化通过分析GPIO_Mode参数判断输入/输出模式并配置CRL/CRH寄存器设置具体引脚的工作模式和速度。整个设计采用寄存器直接映射方式通过结构体指针访问外设寄存器实现了对 STM32 GPIO 外设的底层硬件控制。stm32f10x.h#ifndef__STM32F10X_H__#define__STM32F10X_H__//volatile表⽰容易变得变量防⽌编译器优化,#define__IOvolatiletypedefunsignedintuint32_t;typedefunsignedshortuint16_t;// GPIO寄存器结构体定义typedefstruct{__IOuint32_tCRL;//端⼝配置低寄存器偏移地址0X00__IOuint32_tCRH;//端⼝配置⾼寄存器地址偏移0X04__IOuint32_tIDR;//端⼝数据输⼊寄存器地址偏移0X08__IOuint32_tODR;//端⼝数据输出寄存器地址偏移0X0C__IOuint32_tBSRR;//端⼝位设置、清除寄存器地址偏移0X10__IOuint32_tBRR;//端⼝位清除寄存器地址偏移0X14__IOuint32_tLCKR;//端⼝配置锁定寄存器地址偏移0X18}GPIO_TypeDef;typedefstruct{__IOuint32_tCR;__IOuint32_tCFGR;__IOuint32_tCIR;__IOuint32_tAPB2RSTR;__IOuint32_tAPB1RSTR;__IOuint32_tAHBENR;__IOuint32_tAPB2ENR;__IOuint32_tAPB1ENR;__IOuint32_tBDCR;__IOuint32_tCSR;}RCC_TypeDef;/*⽚上外设基地址*/#definePERIPH_BASE((unsignedint)0x40000000)/*APB2总线基地址*/#defineAPB2PERIPH_BASE(PERIPH_BASE0x10000)/*AHB总线基地址*/#defineAHBPERIPH_BASE(PERIPH_BASE0x20000)/*RCC外设基地址*/#defineRCC_BASE(AHBPERIPH_BASE0x1000)#defineRCC_APB2ENR*(unsignedint*)(RCC_BASE0x18)/*GPIO外设基地址*/#defineGPIOA_BASE(APB2PERIPH_BASE0x0800)#defineGPIOB_BASE(APB2PERIPH_BASE0x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE0x1000)#defineGPIOD_BASE(APB2PERIPH_BASE0x1400)#defineGPIOE_BASE(APB2PERIPH_BASE0x1800)#defineGPIOF_BASE(APB2PERIPH_BASE0x1C00)#defineGPIOG_BASE(APB2PERIPH_BASE0x2000)/* GPIOC寄存器地址*/#defineGPIOC_CRL*(unsignedint*)(GPIOC_BASE0x00)#defineGPIOC_CRH*(unsignedint*)(GPIOC_BASE0x04)#defineGPIOC_IDR*(unsignedint*)(GPIOC_BASE0x08)#defineGPIOC_ODR*(unsignedint*)(GPIOC_BASE0x0C)#defineGPIOC_BSRR*(unsignedint*)(GPIOC_BASE0x10)#defineGPIOC_BRR*(unsignedint*)(GPIOC_BASE0x14)#defineGPIOC_LCKR*(unsignedint*)(GPIOC_BASE0x18)#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)#defineGPIOE((GPIO_TypeDef*)GPIOE_BASE)#defineGPIOF((GPIO_TypeDef*)GPIOF_BASE)#defineGPIOG((GPIO_TypeDef*)GPIOG_BASE)// RCC 外设声明#defineRCC((RCC_TypeDef*)RCC_BASE)#defineGPIO_Pin_0(uint16_t)0x0001)#defineGPIO_Pin_1((uint16_t)0x0002)#defineGPIO_Pin_2((uint16_t)0x0004)#defineGPIO_Pin_3((uint16_t)0x0008)#defineGPIO_Pin_4((uint16_t)0x0010)#defineGPIO_Pin_5((uint16_t)0x0020)#defineGPIO_Pin_6((uint16_t)0x0040)#defineGPIO_Pin_7((uint16_t)0x0080)#defineGPIO_Pin_8((uint16_t)0x0100)#defineGPIO_Pin_9((uint16_t)0x0200)#defineGPIO_Pin_10((uint16_t)0x0400)#defineGPIO_Pin_11((uint16_t)0x0800)#defineGPIO_Pin_12((uint16_t)0x1000)#defineGPIO_Pin_13((uint16_t)0x2000)#defineGPIO_Pin_14((uint16_t)0x4000)#defineGPIO_Pin_15((uint16_t)0x8000)typedefenum{GPIO_Speed_10MHz1,// 10MHZ (01)bGPIO_Speed_2MHz,// 2MHZ (10)bGPIO_Speed_50MHz// 50MHZ (11)b}GPIOSpeed_TypeDef;typedefenum{GPIO_Mode_AIN0x0,GPIO_Mode_IN_FLOATING0x04,GPIO_Mode_IPD0x28,GPIO_Mode_IPU0x48,GPIO_Mode_Out_OD0x14,GPIO_Mode_Out_PP0x10,GPIO_Mode_AF_OD0x1C,GPIO_Mode_AF_PP0x18}GPIOMode_TypeDef;typedefstruct{uint16_tGPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;#endifstm32f10x_gpio.h#ifndef__STM32F10X_GPIO__#define__STM32F10X_GPIO__#includestm32f10x.hvoidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);#endif#includestm32f10x_gpio.hvoidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIOx-BSRRGPIO_Pin;}voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIOx-BRRGPIO_Pin;}/** *函数功能初始化引脚模式 *参数说明 GPIOx该参数为 GPIO_TypeDef 类型的指针指向 GPIO 端⼝的地址 * GPIO_InitTypeDef:GPIO_InitTypeDef 结构体指针指向初始化变量 */voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct){uint32_tcurrentmode0x00,currentpin0x00,pinpos0x00,pos0x00;uint32_ttmpreg0x00,pinmask0x00;/*---------------- GPIO 模式配置 -------------------*/// 把输⼊参数 GPIO_Mode 的低四位暂存在 currentmodecurrentmode((uint32_t)GPIO_InitStruct-GPIO_Mode)((uint32_t)0x0F);// bit4是1表⽰输出bit4是0则是输⼊// 判断bit4是1还是0即⾸选判断是输⼊还是输出模式if((((uint32_t)GPIO_InitStruct-GPIO_Mode)((uint32_t)0x10))!0x00){// 输出模式则要设置输出速度currentmode|(uint32_t)GPIO_InitStruct-GPIO_Speed;}/*-----GPIO CRL 寄存器配置 CRL 寄存器控制着低 8 位 IO- ----*/// 配置端⼝低 8 位即 Pin0~Pin7if(((uint32_t)GPIO_InitStruct-GPIO_Pin((uint32_t)0x00FF))!0x00){// 先备份 CRL 寄存器的值tmpregGPIOx-CRL;// 循环从 Pin0 开始配对找出具体的 Pinfor(pinpos0x00;pinpos0x08;pinpos){//pos的值为1左移pinpos位pos((uint32_t)0x01)pinpos;//令 pos 与输⼊参数 GPIO_PIN 作位与运算currentpin(GPIO_InitStruct-GPIO_Pin)pos;//若 currentpinpos,则找到使⽤的引脚if(currentpinpos){//pinpos 的值左移两位(乘以 4),因为寄存器中 4 个位配置⼀个引脚pospinpos2;//把控制这个引脚的 4 个寄存器位清零其它寄存器位不变pinmask((uint32_t)0x0F)pos;tmpreg~pinmask;// 向寄存器写⼊将要配置的引脚的模式tmpreg|(currentmodepos);// 判断是否为下拉输⼊模式if(GPIO_InitStruct-GPIO_ModeGPIO_Mode_IPD){// 下拉输⼊模式,引脚默认置 0,对 BRR 寄存器写 1 对引脚置 0GPIOx-BRR(((uint32_t)0x01)pinpos);}else{// 判断是否为上拉输⼊模式if(GPIO_InitStruct-GPIO_ModeGPIO_Mode_IPU){// 上拉输⼊模式,引脚默认值为 1,对 BSRR 寄存器写 1 对引脚置 1GPIOx-BSRR(((uint32_t)0x01)pinpos);}}}}// 把前⾯处理后的暂存值写⼊到 CRL 寄存器之中GPIOx-CRLtmpreg;}/*--------GPIO CRH 寄存器配置 CRH 寄存器控制着⾼ 8 位 IO- -----*/// 配置端⼝⾼ 8 位即 Pin8~Pin15if(GPIO_InitStruct-GPIO_Pin0x00FF){// 先备份 CRH 寄存器的值tmpregGPIOx-CRH;// 循环从 Pin8 开始配对找出具体的 Pinfor(pinpos0x00;pinpos0x08;pinpos){pos(((uint32_t)0x01)(pinpos0x08));// pos 与输⼊参数 GPIO_PIN 作位与运算currentpin((GPIO_InitStruct-GPIO_Pin)pos);//若 currentpinpos,则找到使⽤的引脚if(currentpinpos){//pinpos 的值左移两位(乘以 4),因为寄存器中 4 个位配置⼀个引脚pospinpos2;//把控制这个引脚的 4 个寄存器位清零其它寄存器位不变pinmask((uint32_t)0x0F)pos;tmpreg~pinmask;// 向寄存器写⼊将要配置的引脚的模式tmpreg|(currentmodepos);// 判断是否为下拉输⼊模式if(GPIO_InitStruct-GPIO_ModeGPIO_Mode_IPD){// 下拉输⼊模式,引脚默认置 0,对 BRR 寄存器写 1 可对引脚置 0GPIOx-BRR(((uint32_t)0x01)(pinpos0x08));}// 判断是否为上拉输⼊模式if(GPIO_InitStruct-GPIO_ModeGPIO_Mode_IPU){// 上拉输⼊模式,引脚默认值为 1,对 BSRR 寄存器写 1 可对引脚置 1GPIOx-BSRR(((uint32_t)0x01)(pinpos0x08));}}}GPIOx-CRHtmpreg;}}以上欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问我可以提供实战演示或模板库。希望内容能够对你产生帮助
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

旅游网站对比模板下载常见的网络推广方法

8个降AI率工具推荐,本科生开题报告必备 当AI痕迹变成论文的“定时炸弹” 在如今的学术环境中,AI工具已经成为许多本科生完成开题报告的得力助手。然而,随着高校对AI生成内容的检测愈发严格,越来越多的学生开始遭遇“AI率过高”的困…

张小明 2025/12/31 19:26:44 网站建设

企业网站的布局类型如何开通免费网站

上周末和闺蜜打卡新开的猫咖,一口气拍了47段视频,手机弹出“存储空间不足”那一刻,我差点原地裂开。上传到云盘?慢到怀疑人生;挨个删?哪段都舍不得。索性研究了一下午“批量视频压缩”,结果惊喜…

张小明 2026/1/2 7:39:13 网站建设

网站300m空间WordPress文章总数

Windows系统预装了大量不必要的应用程序和服务,这些"数字负担"不仅占用存储空间,还会降低系统运行效率。Win11Debloat作为专业的系统优化工具,提供了一站式的解决方案,让普通用户也能轻松完成复杂的系统配置。本教程将详…

张小明 2025/12/31 8:24:13 网站建设

网站突然掉排名了网站建设找汉狮

STM32串口DMA半满中断实战:如何实现高效无丢包数据采集?在嵌入式开发中,你是否遇到过这样的场景?传感器以115200波特率源源不断地发送数据;单片机一边处理协议解析,一边驱动显示屏、控制继电器;…

张小明 2025/12/31 21:28:35 网站建设

公司自己怎么创建免费网站网页设计与制作书籍

Qwen3-VL-8B微调实战:轻量多模态模型定制指南 你有没有遇到过这样的场景? 客服系统里,用户上传一张模糊的电器说明书截图,问:“这个红圈里的按钮是干嘛用的?” 电商平台中,买家发来一张商品实拍…

张小明 2025/12/31 21:28:33 网站建设

自己怎么设计网页关键字优化技巧

Deep-Live-Cam实时人脸交换性能深度解析与配置调优 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam 实时人脸交换技术在现代视频处理应用…

张小明 2025/12/31 21:28:31 网站建设