STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
这是我的类
PORT:
PORT:
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<<
setType(type);
setMode(mode);
setPUPD(pupd);
setSpeed(speed);
}
void PORT:
///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<<
GPIO->OSPEEDR |= (speed << PinNo);
}
void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {
//GPIO->
GPIO->
GPIO->
}
void PORT::setMode(GPIOMode_TypeDef mode) {
//GPIO->MODER &= ~(GPIO_MODER_MODER0 << PinNo);
GPIO->MODER &= ~(3<<
GPIO->MODER |= (mode << PinNo);
}
u8 PORT::Read() {
return GPIO_ReadInputDataBit(GPIO,Pin);
//return (GPIO->IDR & Pin);
}
支持 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(厂家设备型号), 里面会处理,发送什么数据,接收应该检测什么数据。