精华内容
下载资源
问答
  • STM32HAL库函数用户手册(英文) Description of STM32F4xx HAL drivers
  • HAL库函数手册.pdf

    2021-01-08 10:47:41
    HAL库函数手册.pdf
  • 第一次弄STM32,觉着HAL库很好用,新手入门很快,文档里面有详细的函数使用描述
  • HAL库函数手册 .docx

    2020-06-01 19:31:05
    本资源为hal库函数的文档版,可以进行修改和翻译,里面详细的介绍了hal库中各个函数的用法,可以让你快速的掌握和了解HAL库的用法
  • STM32F1系列的HAL库函数手册原版内容。根据库函数加速开发自己的产品。HAL库函数原版。Description of STM32F1 HAL and Low-layer drivers
  • HAL库函数手册

    2017-03-05 16:53:35
    HAL库函数手册(英文版)
  • stm32F7HAL库函数开发手册(英文原版),官网下载,有目录,有标签,内容可跳转,查询方便。HAL库开发必备。
  • HAL库函数说明

    2019-01-18 16:34:51
    适合新手入手STM32,看懂HAL库,学会Cubemax,基本32就可以用起来了。节省不少开发时间。
  • stm32HAL 库函数手册,对于初学HAL库的小伙伴们有很大帮助。
  • 在ST官网下载HAL库函数手册

    千次阅读 2020-11-18 10:42:30
    1....搜STM32CubeF1(STM32CubeXX)点击文献资料 下载[UM1850 STM32F1 HAL和低层驱动程序 】
    展开全文
  • HAL库函数文档.zip

    2020-03-12 14:39:21
    看懂HAL库,学会Cubemax,新手入手STM32就基本没问题了,挺憨的。还可以减少不少开发时间。
  • 该STM32固件库函数手册详尽地介绍了每个外设初始化配置的函数使用说明,并包括大量的使用示例,直观易懂,能够快速上手进行个性化开发。
  • STM32F1系列的HAL函数库,该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。因此,使用本固态函数库可以大大减少用户的程序编写时间,进而...
  • ARM,嵌入式,STM32hal库函数与STMCubeMX使用手册
  • STM32 HAL库函数说明

    2021-04-12 17:37:58
    第一次弄STM32,觉着HAL库很好用,新手入门很快,文档里面有详细的函数使用描述 文件:590m.com/f/25127180-489659338-b94823(访问密码:551685) 以下内容无关: -------------------------------------------分割...

    第一次弄STM32,觉着HAL库很好用,新手入门很快,文档里面有详细的函数使用描述

    在这里插入图片描述
    文件:590m.com/f/25127180-489659338-b94823(访问密码:551685)

    以下内容无关:

    -------------------------------------------分割线---------------------------------------------

    代理模式是一种结构性设计模式,让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。

    服务接口(ServiceInterface) 声明了服务接口提供的功能。代理必须遵循该接口才能伪装成对象
    服务(Service)类,提供具体的一些实用的业务逻辑
    代理(Proxy)类包含一个指向服务对象的引用成员变量,代理完成其交代的任务(例如延迟加载,记录日志,访问控制或者缓存等)后会将请求传递给服务对象,通常情况下,代理会对其服务对象的整个声明周期进行管理。
    客户端(Client) 能通过同一接口与服务或与代理进行交互,所以你可以在一些需要服务对象的代码中实用代理。
    我们有一个常用的数据库访问接口,大量的客户端都是对数据库进行直接的访问,对系统资源的消耗特别大,并且有很多的重复查询操作。

    直接访问数据库,可能会非常的慢

    这时候我们考虑加入缓存,当需要重复的查询时直接从缓存中获取数据返回到客户端,节省系统开销,并记录一下每一个客户端访问花费的时间。

    代理模式建议新建一个与原服务对象接口相同的代理类, 然后更新应用以将代理对象传递给所有原始对象客户端。 代理类接收到客户端请求后会创建实际的服务对象, 并将所有工作委派给它。

    代理将自己伪装成数据库对象,可以在客户端不知道的情况下做缓存查询操作并记录其访问时间或日志

    定义查询数据库的接口

    public interface DataService {
    // 通过ID查询数据
    String getById(Integer id);
    }
    具体的数据库查询业务类

    public class DataServiceImpl implements DataService{

    // 模拟数据
    final Map<Integer,String> dataMap = new HashMap<Integer,String>(){{
        for (int i = 0; i < 10; i++) {
            put(i,"data_"+ i);
        }
    }};
    
    @Override
    public String getById(Integer id) {
        // 模拟数据库查询的耗时
        try {
            Thread.sleep(2000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return dataMap.get(id);
    }
    

    }
    创建代理类,伪装业务类

    public class DataServiceProxy implements DataService{
    DataService dataService;
    // 缓存
    Map<Integer,String> cacheMap = new HashMap<>();

    public DataServiceProxy(DataService dataService) {
        this.dataService = dataService;
    }
    
    @Override
    public String getById(Integer id) {
        // 记录访问的开始时间
        final long start = System.currentTimeMillis();
        String result = null;
        // 优先从缓存获取
        String cache = getCache(id);
        if (cache == null){
            result = dataService.getById(id);
            // 放入缓存中
            putCache(id,result);
        }else {
            result = cache;
        }
        final long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start) + "ms");
        return result;
    }
    
    // 缓存信息
    private void putCache(Integer id,String value){
        cacheMap.put(id,value);
    }
    // 获取缓存信息
    private String getCache(Integer id){
        return cacheMap.get(id);
    }
    

    }
    客户端

    @Test
    public void ProxyTest() {
    DataService dataService = new DataServiceImpl();
    DataServiceProxy dataServiceProxy = new DataServiceProxy(dataService);
    dataServiceProxy.getById(1);
    // 第二次查询
    dataServiceProxy.getById(1);
    dataServiceProxy.getById(1);
    }
    这种代理模式的设计方式,我们一般称之为静态代理:由编码人员创建完成或由特定工具生成源代码,在编译时就已经将接口、被代理类、代理类等确定类下来,在程序运行之前,代理类的字节码文件已经生成了。如果由其他的代理内容,可能需要新建很多的代码来实现。

    与静态代理最大的区别在于,动态代理类是在程序运行时创建的代理。例如在上面的例子中DataServiceProxy代理类是我们自己定义的,在程序运行之前就已经编译完成。在动态代理中,代理类不是在代码中定义,而是在程序运行时根据我们的需要在Java代码中动态生成的。

    在Java中我们提到动态代理,一般绕不开JDK动态代理和CGLIB动态代理。

    利用JDK自带的代理类来完成,相当于利用一个拦截器(需实现接口InvocationHanlder)配合反射机制生成一个实现代理类的匿名接口,在调用具体的方法前调用InvocationHanlder来处理。

    我们依旧使用DataService接口和DataServiceImpl业务类来完成一个动态代理的案例。

    创建被代理类的接口和业务类(已经有了)
    创建InvocationHanlder接口的实现类,在invoke方法中实现代理的逻辑
    通过Proxy的静态方法newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h)创建一个代理对象。
    public class JDKProxy implements InvocationHandler {
    // 被代理对象
    private Object object;

    // 缓存
    Map<Integer,String> cacheMap = new HashMap<>();
    
    public JDKProxy(Object object) {
        this.object = object;
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 只代理其中的查询方法
        if (method.getName().equals("getById")){
            // 参数
            Integer id = (Integer) args[0];
            // 记录访问的开始时间
            final long start = System.currentTimeMillis();
            String result = null;
            // 优先从缓存获取
            String cache = getCache(id);
            if (cache == null){
                // 代理执行
                result =(String) method.invoke(object,args);
                // 放入缓存中
                putCache(id,result);
            }else {
                result = cache;
            }
            final long end = System.currentTimeMillis();
            System.out.println("耗时:" + (end - start) + "ms");
            return result;
        }else {
            return method.invoke(object,args);
        }
    }
    
    // 缓存信息
    private void putCache(Integer id,String value){
        cacheMap.put(id,value);
    }
    // 获取缓存信息
    private String getCache(Integer id){
        return cacheMap.get(id);
    }
    

    }
    InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;在代理实例调用方法(Method)时,方法调用被编码分派到调用处理程序的invoke方法。

    每一个动态代理类的调用处理程序都必须实现InvocationHandler接口,并且每个代理类的实例都关联到了实现该接口的动态代理类调用处理程序中,当我们通过动态代理对象调用一个方法时候,这个方法的调用就会被转发到实现InvocationHandler接口类的invoke方法来调用,看如下invoke方法:

    /**

    • proxy:代理类代理的真实代理对象com.sun.proxy.$Proxy0(按次序进行,每生成一个 +1)
    • method:我们所要调用某个对象真实的方法的Method对象
    • args:指代代理对象方法传递的参数
      */
      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
      客户端在调用时的方式也和静态代理不一样,最终是使用代理类$Proxy来进行方法的调用

    @Test
    public void JDKProxyTest() {
    DataService dataService = new DataServiceImpl();
    JDKProxy jdkProxy = new JDKProxy(dataService);
    // 获取代理对象
    DataService dataServiceProxy = (DataService) Proxy.newProxyInstance(DataService.class.getClassLoader(), new Class[]{DataService.class}, jdkProxy);
    dataServiceProxy.getById(1);
    dataServiceProxy.getById(1);
    }
    其运行的结果是一样的,都完成了代理内容。

    Proxy类就是用来创建一个代理对象的类,它提供了很多方法,我们最常用的是newProxyInstance方法。

    public static Object newProxyInstance(ClassLoader loader,
    Class<?>[] interfaces,
    InvocationHandler h)
    newProxyInstance就是创建一个代理类对象,它接收三个参数:

    loader:指定代理类的类加载器(我们传入当前测试类的类加载器)
    interfaces:一个interface对象数组,代理类需要实现的接口(我们传入被代理类实现的接口,这样生成的代理类和被代理类就实现了相同的接口)
    h:一个InvocationHandler对象,表示的是当动态代理对象调用方法的时候会关联到哪一个InvocationHandler对象上,用来处理方法的调用。这里传入我们自己实现的handler
    利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

    导入cglib-xxx.jar包,这里包含了asm和cglib
    创建MethodInterceptor接口的实现类,在intercept方法中实现代理的逻辑
    编写getCglibProxy方法(自定义)返回代理类对象

    cglib
    cglib
    3.3.0

    public class CglibProxy implements MethodInterceptor {
    // 被代理对象,便于通用,可以写成Object
    private Object object;

    // 缓存
    Map<Integer,String> cacheMap = new HashMap<>();
    
    @Override
    public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        // 只代理其中的查询方法
        if (method.getName().equals("getById")) {
            // 参数
            Integer id = (Integer) args[0];
            // 记录访问的开始时间
            final long start = System.currentTimeMillis();
            String result = null;
            // 优先从缓存获取
            String cache = getCache(id);
            if (cache == null) {
                result = (String)method.invoke(object,args);
                // 放入缓存中
                putCache(id, result);
            } else {
                result = cache;
            }
            final long end = System.currentTimeMillis();
            System.out.println("耗时:" + (end - start) + "ms");
            return result;
        } else {
            return method.invoke(object, args);
        }
    }
    
    // 获取代理对象 这里采用了范型的写法,更直观的传入被代理类,然后返回代理对象
    public <T> T getCglibProxy(T t){
        this.object = t;//为目标对象target赋值
        Enhancer enhancer = new Enhancer();
        //设置父类,因为Cglib是针对指定的类生成一个子类,所以需要指定父类
        enhancer.setSuperclass(object.getClass());
        //设置回调
        enhancer.setCallback(this);
        //创建并返回代理对象
        Object result = enhancer.create();
        return (T) result;
    }
    
    // 缓存信息
    private void putCache(Integer id,String value){
        cacheMap.put(id,value);
    }
    // 获取缓存信息
    private String getCache(Integer id){
        return cacheMap.get(id);
    }
    

    }
    @Test
    public void CGLBProxyTest(){
    // 被代理类 这里可以不用接口声明哦
    DataService dataService = new DataServiceImpl();
    CglibProxy cglibProxy = new CglibProxy();
    // 获取代理对象
    DataService proxy = cglibProxy.getCglibProxy(dataService);
    proxy.getById(1);
    proxy.getById(1);
    }
    可以发现两种动态代理的写法基本差不多,基本的思路都是生成代理类,拦截,反射,获取真正的代理类方法,执行。那么两种方式有什么区别和用法呢?

    JDK动态代理只能对实现了接口的类生成代理,而不能针对类 ,使用的是 Java反射技术实现,生成类的过程比较高效。
    CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 ,使用asm字节码框架实现,相关执行的过程比较高效,生成类的过程可以利用缓存弥补,因为是继承,所以该类或方法最好不要声明成final
    JDK代理是不需要第三方库支持,只需要JDK环境就可以进行代理
    CGLIB必须依赖于CGLIB的类库,但是它需要类来实现任何接口代理的是指定的类生成一个子类,覆盖其中的方法,是一种继承但是针对接口编程的环境下推荐使用JDK的代理;

    展开全文
  • STM32H7 HAL驱动库英文版的用户手册; STMCubeTM 可降低开发人员的开发工作量、开发时间还有开发成本,使开发人员的生活更轻松; HAL驱动层提供了一组简单的通用多实例api来与上层(应用程序、库和堆栈)交互。 ...
  • stm32l0低功耗,包括编程手册hal库函数api.
  • 上传一份STM32的F4的HAL库使用手册,英文的。有需要就下载吧。
  • 使用官方《stm32f1_hal库使用手册》文件,通过百度翻译制作,仅供参考,文本可编辑,翻译不靠谱的地方可以重新翻译。
  • HAL手册非常全面

    2019-11-18 10:46:25
    stm32 HAL库函数手册,对于初学HAL库的小伙伴们有很大帮助。 简单明了!!能查看函数说明,宏定义,变量说明等
  • STM32F1 HAL手册原版

    2019-04-26 18:00:10
    STM32F1 HAL手册原版,英文版,包含HAL和LL库的使用例程。
  • STM32 HAL常用库函数(持续更新)

    万次阅读 多人点赞 2019-09-25 17:28:14
    函数名称:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 第一个参数:GPIOA,B,C,D…(取决于单片机型号) 第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15 第三个参数:...

    1.设置GPIO引脚函数
    函数名称:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
    第一个参数:GPIOA,B,C,D…(取决于单片机型号)
    第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15
    第三个参数:GPIO_PIN_SET(置高电平),GPIO_PIN_RESET(置低电平)
    例:

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);//将PA0置高电平
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);//将PA0置低电平
    

    2.读取GPIO引脚函数
    函数名称:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    第一个参数:GPIOA,B,C,D…(取决于单片机型号)
    第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15
    返回值:返回"0",对应引脚为低电平,返回"1",对应引脚为高电平。
    例:

    uint8_t pinstate = 0;
    pinstate = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
    

    3.GPIO引脚翻转函数
    函数名称:void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    函数功能:若引脚为低电平,则变为高电平;若为高电平,则变为低电平。
    第一个参数:GPIOA,B,C,D…(取决于单片机型号)
    第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15
    4.串口发送函数
    函数名称:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
    函数功能:向串口发送数据(字符串)
    第一个参数:哪一个串口
    第二个参数:数据指针,指针类型为uint8_t *
    第三个参数:数据长度
    第四个参数:超时时间,单位是ms
    返回值:HAL状态。有四种状态,分别是HAL_OK,HAL_ERROR,HAL_BUSY,HAL_TIMEOUT。
    例:

    HAL_UART_Transmit(&huart1, "Hello World!!", 13, 100);//向串口1发送Hello World!!
    

    5.printf串口发送函数(重写fputc)
    我用过两个版本的fputc,分别对应不同的stm32单片机型号,因为它们的USART寄存器不一样。
    版本一:

    int fputc(int ch, FILE *f)
    {      
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
        USART1->DR = (uint8_t) ch;      
        return ch;
    }
    

    版本二:

    int fputc(int ch,FILE *f)
    {
    	while(!((USART1->ISR)&(1<<7)));
    	USART1->TDR = ch;
    	return ch;
    }
    

    6.延时函数
    函数名称:void HAL_Delay(uint32_t Delay);
    函数功能:毫秒延时函数
    参数:延时时间,单位ms
    7.定时器中断函数
    需要重写HAL_TIM_PeriodElapsedCallback函数,直接看例子:

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
        static unsigned char ledState = 0;
        if (htim == (&htim2))//TIM2的中断服务函数
        {
            if (ledState == 0)
                HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
            else
                HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);
            ledState = !ledState;
        }
    }
    

    若使用定时器中断,还需先打开定时器中断,相关函数如下:

    HAL_TIM_Base_Start_IT(&htim2);//开定时器中断函数
    HAL_TIM_Base_Stop_IT(&htim2);//关闭时器中断函数
    

    8.PWM相关函数
    函数名称:HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
    第一个参数:哪个定时器
    第二个参数:哪个通道
    返回值:HAL状态,与第四个串口发送函数返回只相同。
    例:

    HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);//开启定时器5,第二个通道的PWM
    

    pwm修改占空比:__HAL_TIM_SetCompare

    __HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_2, 100);//即TIM5,第二个通道的比较值改为100,通过修改比较值修改占空比
    

    也可以使用寄存器修改,同样很方便:

    TIM5->CCR2 = 100;
    
    展开全文
  • 中文手册是MSP430x2xx系列,英文文档可以在TI官网下载;函数库包含MSP430F5xx_6xx、MSP430FR2xx_4xx、MSP430FR5xx_6xx、MSP430FR27xx和MSP430i2xx。
  • 地址:https://www.st.com/en/embedded-software/stm32cube-mcu-mpu-packages.html#products
    展开全文
  • 文章目录一、标准库二、HAL库三、库函数HAL库对比总结 我们刚开始学习51的时候有的人会直接选择进行对单片机的寄存器进行操作,可以很好的理解单片机的工作原理,对于代码的编写也会后很好的理解,但是在stm32的...
  • 传感器系列资料包括每种传感器的原理图及配套程序。 每种传感器均配套裸机部分例程及协议栈例程。部分没有配套协议栈例程的传感器,请参考实战演练中其他传感器移植方法自行移植。 ...部分传感器只配套zibgee平台...
  • 本资源包含最新版的STM32CubeMX中文版教程,非常适合入门CubeMX的初学者,有详细的解释,同时包含L4系列HAL库资料,这种库函数资料较少,可在使用CubeMX时使用。加强理解。
  • stm32f1xx_hal库函数说明

    2018-01-24 13:08:03
    stm32f1xx_hal固件库函数手册,包括hal库和底层函数,英文版
  • STM32_HAL库函数之常用函数总结及注释

    千次阅读 多人点赞 2020-12-17 08:47:24
    刚学HAL库在总是不知道调用哪个函数,就算知道也写不出来,复制粘贴才是王道… 本文整理了一些常用的函数,有注释和使用方法方便使用的时候直接复制 目前有GPIO、UART、ADC、DAC、TIM、PWM、IIC、SPI、CAN、FLASH、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 768
精华内容 307
关键字:

hal库函数中文手册