当前位置:科技动态 > stm32设置功能(stm32位置pid程序)

stm32设置功能(stm32位置pid程序)

  • 发布:2023-10-01 08:49

stm32设置功能(stm32位置pid程序)

STM32编写程序设置GPIA.0和GPIOA.1

课本上没学过。实际应用中,调用库函数,也可以直接操作寄存器。例如 GPIOA->ODR |= 0x0003 就足够了,也可以配置 GPIOA->BSR = 0x03....

寻找stm32的GPIO配置功能。您可以使用此功能配置任意GPIO端口(如下图)

void config_gpio(u32 PORTx, u32 MODE, u32 PINxs, PULL_STAT stat)//PORTx=0,代表GPIOA,以此类推。 PINx从0开始。MODE和stat如下表所示。需要自己实现PULL_STAT枚举类型
{
00=模拟,01=浮动,10=上拉/下拉,11=保留
                                                                                                                                                                                                  。 0 11
低 2 位(MODEy):
输入 00
输出 01=10MHz, 10=2MHz, 11=50MHz
*/
GPIO_TypeDef* GPIOs[] = {GPIOA, GPIOB ,GPIOC,GPIOD, GPIOE,GPIOF,GPIOG};
MODE|=stat<<2;
if(PINxs>15)
{
PINxs -= 8;
GPIOs[PORTx ]->CRH = MODE<<(PINxs*4);
}
else
{
GPIO[PORTx]->CRL = MODE<<(PINxs*4);
}
}

  至于

void set_PINxs(u32 PORTx, u32 PINxs, PIN_VAL val)
{
}

   可以使用位带实现,如下所示:

  另存为system.h

#ifndef __SYS_H
#define __SYS_H
#include "stm32f10x.h"
//0,不支持ucos
//1,支持ucos
#define SYSTEM_SUP PORT_UC操作系统0 //定义系统文件 该剪辑是否支持UCOS?


//位带操作实现51个类似的GPIO控制功能
//具体实现思路参考<>第5章(第87~92页).
/ /IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr ) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
#define GPIOA_ODR_Addr (GPIOA_BASE +12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x4001 1E0C
#define GPIOA_IDR_Addr (GPIOA_BASE+8 ) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR _Addr (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr ( GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40 011E08

//IO口操作,仅用于单IO口!
//确保n的值小于16!
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n ) //输出
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr ,n) //输出
#define PCin(n) BIT_ADDR (GPIOC_IDR_Addr,n) //输入
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出
#define PDin(n ) BIT_ADDR(GPIOD_IDR_Addr,n) //输入
#define PEout (n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入
#define PGout(n) B IT_ADDR(GPIOG_ODR_Addr, n ) //输出
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入

//void NVIC_Configuration(void);

#endif

  直接使用时:

PAout(0) = 0;
//或
a = PAin(0);

  当然也可以使用STM32库函数

以上是小编对stm32设置功能(stm32位置pid程序)及相关问题的解答。希望关于stm32定位功能(stm32定位pid程序)对您有用!

相关文章