当前位置: 首页 > news >正文

如何承接设计网站建设/百度浏览器网页

如何承接设计网站建设,百度浏览器网页,做网站销售会问哪些问题,网站建设公司利润分配目录 1、原理图2、文件结构3、使用寄存器模式点亮3.1、什么是寄存器3.2、寄存器开发的本质3.3、寄存器开发步骤3.4、主要源码3.4.1、main.c3.4.2、drv_gpio.h3.4.3、drv_gpio.c3.4.4、使用BSRR和BRR影子寄存器优化drv_gpio.c3.4.5、效果演示 4、使用标准库模式点亮4.1、使用标准…

目录

    • 1、原理图
    • 2、文件结构
    • 3、使用寄存器模式点亮
      • 3.1、什么是寄存器
      • 3.2、寄存器开发的本质
      • 3.3、寄存器开发步骤
      • 3.4、主要源码
        • 3.4.1、main.c
        • 3.4.2、drv_gpio.h
        • 3.4.3、drv_gpio.c
        • 3.4.4、使用BSRR和BRR影子寄存器优化`drv_gpio.c`
        • 3.4.5、效果演示
    • 4、使用标准库模式点亮
      • 4.1、使用标准库模式的好处
      • 4.2、主要源码
        • 4.2.1、main.c
        • 4.2.2、drv_gpio.h
        • 4.2.3、drv_gpio.c
        • 4.2.4、效果演示多了白灯

1、原理图

在这里插入图片描述
如图知,拉低为点亮

  • LED

    引脚状态
    D3红PB5输出, 拉低为亮
    D3绿PB0输出, 拉低为亮
    D3蓝PB1输出, 拉低为亮

2、文件结构

在这里插入图片描述

3、使用寄存器模式点亮

3.1、什么是寄存器

寄存器是微控制器(MCU)内部的一种特殊存储器,用于存储配置参数、状态信息或控制信号。每个寄存器通常有固定的地址,并且每一位或一组位对应特定的功能。

3.2、寄存器开发的本质

寄存器开发的本质是直接与硬件交互,绕过高级库(如 HAL 库或标准库)的封装,直接操作底层硬件。
STM32 的寄存器开发是通过直接读写寄存器来实现对外设的控制。

3.3、寄存器开发步骤

(1) 查找寄存器地址

  • 根据 STM32 的参考手册(Reference Manual),找到目标外设的寄存器地址。
  • 每个外设(如 GPIO、TIMER、USART 等)都有一组寄存器,用于配置和控制其行为。

(2) 配置寄存器

  • 通过指针操作或直接访问寄存器地址,向寄存器写入特定的值,以配置外设的工作模式、中断、时钟等。

(3) 读取寄存器

  • 通过读取寄存器的值,获取外设的状态信息(如标志位、数据等)。

3.4、主要源码

3.4.1、main.c
#include "drv_gpio.h"// SysTick 初始化
void SysTick_Init(void)
{SysTick->LOAD = 72000000 / 1000 - 1; // 1ms 延时SysTick->VAL = 0;					 // 清空当前值SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
}// 精确延时函数(单位:ms)
void Delay_ms(uint32_t ms)
{for (uint32_t i = 0; i < ms; i++){while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));}
}int main()
{// 初始化 SysTickSysTick_Init();// 初始化 RGB LEDRGB_Init();while (1){RGB_RedOn();Delay_ms(500);  // 延时 500msRGB_RedOff();RGB_GreenOn();Delay_ms(500);  // 延时 500msRGB_GreenOff();RGB_BlueOn();Delay_ms(500);  // 延时 500msRGB_BlueOff();}
}
3.4.2、drv_gpio.h
#ifndef _DRV_GPIO_H_
#define _DRV_GPIO_H_//ARM提供的,有所有外设寄存器的信息
#include "stm32f10x.h"void RGB_Init(void);void RGB_RedOn(void);void RGB_RedOff(void);void RGB_GreenOn(void);void RGB_GreenOff(void);void RGB_BlueOn(void);void RGB_BlueOff(void);#endif
3.4.3、drv_gpio.c
#include "drv_gpio.h"void RGB_Init(void)
{// 1.配置RCCRCC->APB2ENR |= (1 << 3);// 2.配置PB5的功能// bit 20~23 全部置为0//  bit 20 置为1//pb5GPIOB->CRL &= (uint32_t)(~(0xF << 20));GPIOB->CRL |= (uint32_t)(1 << 20);  //配置为通用推挽输出模式(0b0001)//pb0GPIOB->CRL &= (uint32_t)(~(0xF));GPIOB->CRL |= (uint32_t)(1);//pb1GPIOB->CRL &= (uint32_t)(~(0xF << 4));GPIOB->CRL |= (uint32_t)(1 << 4);  // 3.将pb5、pb0、pb1的初始值改为1,防止配置完就亮灯GPIOB->ODR |= (1 << 5);GPIOB->ODR |= 1;GPIOB->ODR |= (1 << 1);}void RGB_RedOn(void)
{// 3.拉低PB5对应的ODR寄存器地址GPIOB->ODR &= ~(1 << 5);
}void RGB_RedOff(void)
{GPIOB->ODR |= (1 << 5);
}void RGB_GreenOn(void)
{GPIOB->ODR &= ~(1);
}void RGB_GreenOff(void)
{GPIOB->ODR |= 1;
}void RGB_BlueOn(void)
{GPIOB->ODR &= ~(1 << 1);
}void RGB_BlueOff(void)
{GPIOB->ODR |= (1 << 1);
}
3.4.4、使用BSRR和BRR影子寄存器优化drv_gpio.c

由于对ODR直接操作, 可能有意无意修改到其他引脚的状态

#include "drv_gpio.h"void RGB_Init(void)
{// 1.配置RCCRCC->APB2ENR |= (1 << 3);// 2.配置PB5的功能// bit 20~23 全部置为0//  bit 20 置为1//pb5GPIOB->CRL &= (uint32_t)(~(0xF << 20));GPIOB->CRL |= (uint32_t)(1 << 20);  //配置为通用推挽输出模式(0b0001)//pb0GPIOB->CRL &= (uint32_t)(~(0xF));GPIOB->CRL |= (uint32_t)(1);//pb1GPIOB->CRL &= (uint32_t)(~(0xF << 4));GPIOB->CRL |= (uint32_t)(1 << 4);  // 3.将pb5、pb0、pb1的初始值改为1,防止配置完就亮灯GPIOB->ODR |= (1 << 5);GPIOB->ODR |= 1;GPIOB->ODR |= (1 << 1);}void RGB_RedOn(void)
{// 3.拉低PB5对应的ODR寄存器地址//GPIOB->ODR &= ~(1 << 5); GPIOB->BRR &= (1 << 5);// 直接将PB5拉低,同时不影响其他位
}void RGB_RedOff(void)
{//GPIOB->ODR |= (1 << 5);GPIOB->BSRR |= (1 << 5); //直接拉高,并不影响
}void RGB_GreenOn(void)
{//GPIOB->ODR &= ~(1);GPIOB->BRR &= (1);
}void RGB_GreenOff(void)
{//GPIOB->ODR |= 1;GPIOB->BSRR |= (1);
}void RGB_BlueOn(void)
{//GPIOB->ODR &= ~(1 << 1);GPIOB->BRR &= (1 << 1);
}void RGB_BlueOff(void)
{//GPIOB->ODR |= (1 << 1);GPIOB->BSRR |= (1 << 1);
}
3.4.5、效果演示

在这里插入图片描述

4、使用标准库模式点亮

4.1、使用标准库模式的好处

标准库封装了底层寄存器的操作,提供了易于理解的API函数,开发者无需直接读写寄存器。

4.2、主要源码

4.2.1、main.c
#include "drv_gpio.h"// SysTick 初始化
void SysTick_Init(void)
{SysTick->LOAD = 72000000 / 1000 - 1; // 1ms 延时SysTick->VAL = 0;					 // 清空当前值SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
}// 精确延时函数(单位:ms)
void Delay_ms(uint32_t ms)
{for (uint32_t i = 0; i < ms; i++){while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));}
}int main()
{// 初始化 SysTickSysTick_Init();// 初始化 RGB LEDRGB_Init();while (1){RGB_RedOn();Delay_ms(500);  // 延时 500msRGB_RedOff();RGB_GreenOn();Delay_ms(500);  // 延时 500msRGB_GreenOff();RGB_BlueOn();Delay_ms(500);  // 延时 500msRGB_BlueOff();RGB_WriteOn();Delay_ms(500);  // 延时 500msRGB_WriteOff();}
}
4.2.2、drv_gpio.h
#ifndef _DRV_GPIO_H_
#define _DRV_GPIO_H_//使用gpio标准库
#include "stm32f10x_gpio.h"#define RGB_Port GPIOB
#define RGB_Pin_R GPIO_Pin_5
#define RGB_Pin_G GPIO_Pin_0
#define RGB_Pin_B GPIO_Pin_1void RGB_Init(void);void RGB_RedOn(void);void RGB_RedOff(void);void RGB_GreenOn(void);void RGB_GreenOff(void);void RGB_BlueOn(void);void RGB_BlueOff(void);void RGB_WriteOn(void);void RGB_WriteOff(void);#endif
4.2.3、drv_gpio.c
#include "drv_gpio.h"void RGB_Init(void)
{// 1.RCC配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 2、配置红、绿、蓝灯输出GPIO_InitTypeDef gpio_initStruct = {0};gpio_initStruct.GPIO_Pin = RGB_Pin_R | RGB_Pin_G | RGB_Pin_B;gpio_initStruct.GPIO_Speed = GPIO_Speed_50MHz;gpio_initStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(RGB_Port, &gpio_initStruct);GPIO_SetBits(RGB_Port, RGB_Pin_R | RGB_Pin_G | RGB_Pin_B);
}void RGB_RedOn(void)
{// 3.拉低PB5对应的ODR寄存器地址GPIO_ResetBits(RGB_Port, RGB_Pin_R);
}void RGB_RedOff(void)
{GPIO_SetBits(RGB_Port, RGB_Pin_R);
}void RGB_GreenOn(void)
{GPIO_ResetBits(RGB_Port, RGB_Pin_G);
}void RGB_GreenOff(void)
{GPIO_SetBits(RGB_Port, RGB_Pin_G);
}void RGB_BlueOn(void)
{GPIO_ResetBits(RGB_Port, RGB_Pin_B);
}void RGB_BlueOff(void)
{GPIO_SetBits(RGB_Port, RGB_Pin_B);
}void RGB_WriteOn(void)
{GPIO_ResetBits(RGB_Port, RGB_Pin_R | RGB_Pin_G | RGB_Pin_B);
}void RGB_WriteOff(void)
{GPIO_SetBits(RGB_Port, RGB_Pin_R | RGB_Pin_G | RGB_Pin_B);
}
4.2.4、效果演示多了白灯

在这里插入图片描述

http://www.lryc.cn/news/577877.html

相关文章:

  • 上海企业网站建设方法/seo是干什么的
  • 接做网站需要问什么条件/巩义网络推广公司
  • 做国际交友网站翻译/网站生成
  • 网站建设立项ppt/无锡谷歌优化
  • 最专业的外贸网站建设/合肥全网优化
  • 怎样给网站或者商品做推广/百度网站介绍
  • 做游戏网站有几个要素/成都网站seo技术
  • 网站建设方案书域名备案/网络推广的几种方式
  • 豆各庄做网站的公司/seo网站优化教程
  • 做pc端网站新闻/网站如何让百度收录
  • 黑马程序员项目库/北京公司排名seo
  • 丹阳市网站制作/深圳百度公司地址在哪里
  • 西丽网站建设/正规网络推广服务
  • 吉安建站公司/seo指的是搜索引擎
  • 网站彩票怎么做/排名优化公司哪家效果好
  • 一个高端网站设计/宜兴网站建设
  • 哪里有好的免费成品网站程序/百度站长平台网站提交
  • 陕西建设厅网站/网络推广有哪些方法
  • 企业如何网站建设/关键词优化排名首页
  • 网站建成之后应该怎么做/写文的免费软件
  • seo快速排名站外流量推广/短视频营销的优势
  • wordpress修改搜索框全屏/白城seo
  • 利用博客做网站排名/推广网站有哪些
  • 个人计算机做服务器建网站/北京百度推广官网首页
  • 西安网站微信开发/大一网页设计作业成品
  • 做电影免费ppt模板下载网站/百度快照怎么使用
  • retweet主题 wordpress/上海专业seo
  • 网站制作成品免费/生哥seo博客
  • 石家庄h5网站建设/网站排名提高
  • 网站排名优化公司哪家好/网站提交入口链接