你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F4 C++ 封装库 之 GPIO

[复制链接]
XinLiYF 发布时间:2018-4-1 14:47
阅读主题, 点击返回1楼
收藏 评论12 发布时间:2018-4-1 14:47
12个回答
wecreate 回答时间:2019-8-16 15:29:13
我一直是用c++开发的
这是我的类
PORT:ORT(){};
PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){
if (gpio==GPIOA) PortNo=0;
if (gpio==GPIOB) PortNo=1;
if (gpio==GPIOC) PortNo=2;
if (gpio==GPIOD) PortNo=3;
if (gpio==GPIOE) PortNo=4;
if (gpio==GPIOF) PortNo=5;

GPIO=gpio;
Pin=1<<pin;
PinNo=pin*2;
  
  RCC->AHB1ENR |= 1<<ortNo;
  
  setType(type);
  setMode(mode);
  setPUPD(pupd);
  setSpeed(speed);

}

void PORT:ow() {
  ///GPIO->BSRRH =Pin;
  GPIO->ODR &=~(1<<(PinNo/2));
}
void PORT::High() {
  //GPIO->BSRRL =Pin;
  GPIO->ODR |=1<<(PinNo/2);
}
void PORT::setType(GPIOOType_TypeDef type) {
    //GPIO->OTYPER  &= ~(GPIO_OTYPER_OT_0 << (uint16_t)(PinNo/2)) ;
    //GPIO->OTYPER |= (uint16_t)(type<< (uint16_t)(PinNo/2));

  GPIO->OTYPER &=~(1<<(PinNo/2));
  GPIO->OTYPER |=type<<(PinNo/2);
}
void PORT::setSpeed(GPIOSpeed_TypeDef speed) {
    //GPIO->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << PinNo);
  GPIO->OSPEEDR &=~(3<<inNo);
    GPIO->OSPEEDR |= (speed << PinNo);
}
void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {
  //GPIO->UPDR &= ~(GPIO_PUPDR_PUPDR0 << PinNo);
  GPIO->UPDR &=~(3<<inNo);
    GPIO->UPDR |= (pupd << PinNo);
}
void PORT::setMode(GPIOMode_TypeDef mode) {
  //GPIO->MODER  &= ~(GPIO_MODER_MODER0 << PinNo);
  GPIO->MODER &= ~(3<<inNo);
    GPIO->MODER |= (mode << PinNo);
}
u8 PORT::Read() {
  return GPIO_ReadInputDataBit(GPIO,Pin);
  //return (GPIO->IDR & Pin);
}
wecreate 回答时间:2019-8-16 15:55:20
还封装了 LED灯、LED单采、LED全彩、ILI9341,SSD1315,LD3320,SD卡 开关、串口、IIC、SPI、DTU、WIFI、外部flash,内部flash,LAN(w5500)和一部分传感器(温湿,pm25,负氧离子,SO2.....)
支持 f103c8t6和f407vet6。
usart,iic,spi 实现软硬2种方式。

LED LED_Running(GPIOD,10);

使用 :LED_Running.Turn(true);点亮, LED_Running.Turn(false);点黑

SWITCH wifiSwitch(GPIOE,9);

使用:if (wifiSwitch.isOn) 是否开,if (wifiSwitch.isOff) 是否关,类里已经处理重复触发。

USART usart_wifi(USART1,new PORT(GPIOA,9),new PORT(GPIOA,10),0,115200);

使用:usart_wifi.sendData(buf,8);

SPI spi_flash(SPI1);或者SPI spi_sort(new PORT(GPIOA,9,....)软件模拟spi
使用: spi_flash.sendData(buf,8);

IIC iic_Pm25(new PORT(GPIOC,9),new PORT(GPIOA,8));
WIFI wifi(&usart_wifi);
DTU dtu(&usart_dtu);
LAN lan(&spi_lan,new PORT(GPIOE,0),new PORT(GPIOB,8),new PORT(GPIOB,9),&LED_Lan);

使用 SOCKET tcp=lan.InitTCP();sock.connect();
SOCKET udp=lan.InitUDP();sock.bind();
udp.sendData(buf,len);
内部自增加socket,

EFLASH eflash(&spi_flash,new PORT(GPIOA,4));
VAR var(&eflash); 变量管理,如果用内部存储,就定义个 MEMORY flash(&spi....)然后 VAR var(&flash)
使用 var.setInt(key,value) var.getInt(key)

TEMPHUMI TempHumi(&usart5);
ION Ion(&usart5); 温湿度和负氧离子,使用的是同一个485的 usart5口
PM25 Pm25(&iic_Pm25); pm25用的iic的,如果是串口的,就用 PM25 Pm25(&usart5);

使用 Pm25.setType(厂家设备型号), 里面会处理,发送什么数据,接收应该检测什么数据。
generalcircuits 回答时间:2019-8-17 09:55:22
感谢分享
12

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版