很荣幸能够有资格参加 Let's do 2026 年第 3 期活动。期待了很久的快递终于到了,先拆箱看一下。
NUCLEO-H533RE

板子上部为stlink,通过Type-c口进行供电,有一个用户按键,一个用户LED。
下部为芯片及其引出脚,can fd收发器等。
加速度传感器

LIS3DH支持i2c,spi,ADC三种通信方式,内置温度传感器。
步进电机及驱动板

28BYJ-48 减速步进电机和 ULN2003 驱动板如图所示。
蜂鸣器模块

蜂鸣器模块如图所示
环境配置
下载CUBEMX2

选择好型号新建工程先点个灯。
选择PA5,配置为输出模式。

生成CMake项目

对VScode进行配置,下载stm插件,过VSCodde打开工程。

先写个闪烁小灯代码
HAL_Delay(100); HAL_GPIO_TogglePin(HAL_GPIOA, HAL_GPIO_PIN_5);
对步进电机进行测试。
将PC2,PC3,PC10,PC12设置为GPIO输出模式。
运行驱动代码。
驱动程序
void MOTO_RUN(uint16_t wait){ HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_SET);//A+ HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_RESET); HAL_Delay(wait);HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_SET);//A+B+ HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_SET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_RESET); HAL_Delay(wait);
HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_RESET);//B+ HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_SET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_RESET); HAL_Delay(wait);
HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_RESET);//A-B+ HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_SET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_SET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_RESET); HAL_Delay(wait);
HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_RESET);//A- HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_SET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_RESET); HAL_Delay(wait);
HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_RESET);//A-B- HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_SET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_SET); HAL_Delay(wait);
HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_RESET);//B- HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_SET); HAL_Delay(wait);
HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_2, HAL_GPIO_PIN_SET);//A+B- HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_3, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_10, HAL_GPIO_PIN_RESET); HAL_GPIO_WritePin(HAL_GPIOC, HAL_GPIO_PIN_12, HAL_GPIO_PIN_SET); HAL_Delay(wait);
}
运行代码。
MOTO_RUN(0);

对加速度检测模块进行测试
打开I2C1,打开USART2,运行驱动程序。
驱动程序
void LIS3DHTR_Read(uint8_t reg, uint8_t *value, uint8_t len){ uint16_t iic_addre = 0x19;HAL_I2C_MASTER_MemRead(mx_i2c1_i2c_gethandle(), iic_addre << 1, reg, 1, value, len, 100);}
void LIS3DHTR_Write(uint8_t reg, uint8_t value){ uint16_t iic_addre = 0x19; HAL_I2C_MASTER_MemWrite(mx_i2c1_i2c_gethandle(), iic_addre << 1, reg, 1, &value, 1, 100);}
void LIS3DHTR_Init(void){
uint8_t LIS3DHTR_CTRL_REG1 = 0x20; uint8_t LIS3DHTR_CTRL_REG4 = 0x23; uint8_t LIS3DHTR_TEMP_CFG_REG = 0x1F;
LIS3DHTR_Write(LIS3DHTR_CTRL_REG1, 0x47); LIS3DHTR_Write(LIS3DHTR_CTRL_REG4, 0x80); LIS3DHTR_Write(LIS3DHTR_TEMP_CFG_REG, 0xC0);
}
void LIS3DHTR_Read_XYZ(int16_t *acc){ uint8_t acc_buf[6] = {0}; LIS3DHTR_Read(0x28 | 0x80, acc_buf, 6); // 自动递增读 6 字节
acc[0] = (int16_t)(acc_buf[1] << 8 | acc_buf[0]); acc[1] = (int16_t)(acc_buf[3] << 8 | acc_buf[2]); acc[2] = (int16_t)(acc_buf[5] << 8 | acc_buf[4]);
}
运行代码
LIS3DHTR_Init();while (1) { uint8_t id = 0; uint8_t buf[2] = {0}; uint8_t sub_addr = 0x0C | 0x80; int16_t acc[3] = {0};
LIS3DHTR_Read(0x0F, &id, 1); LIS3DHTR_Read(sub_addr, buf, 2); LIS3DHTR_Read_XYZ(acc);
int16_t raw = (int16_t)(buf[0] | (buf[1] << 8)); int16_t temperature = (raw / 256) + 25;
printf("id: %xrn", id); printf("temperature: %drn", temperature); printf("acc_x: %f.3 ,", acc[0]/ 16); printf("acc_y: %f.3 ,", acc[1]/ 16); printf("acc_z: %f.3rn", acc[2]/ 16); }

经过测试,板子都正常,后续决定先研究一下项目,学习一下边缘AI相关的知识。再对项目做一个整体规划,就可以开始了。
我要赚赏金
