本帖最后由 suncat0504 于 2023-12-2 20:16 编辑
之前国内发生了多起在盛夏把熟睡的儿童单独置于车内,由于阳光曝晒、车窗紧闭导致的安全事故。因此萌发了制作一个监测控制系统,在车内有人在熟睡状态下,出现高温、闷热、氧气不足场合,产生报警以及自动将车窗打开一定缝隙,增加空气流动,避免对孩童产生伤害的系统。在这里要感谢得捷提供的机会,让我可以申请到合适的开发板,来着手制作这个系统。 我申请的是以STM32U585AII6Q为控制核心的B-U585I-IOT02A物联网开发板,之所以选择这块开发板,是因为看中了这块开发板上集成多种传感器,可以直接拿来使用。集成度高,接口已经设置好,可以快速搭配起开发环境。 板子刚拿到手里的时候,按照习惯,马上上网查找它的资料。不过很遗憾啊,这个板子的中文资料,我最终没有找到,找到的是英文版的资料。对于一个二外不是英语的人来说,是有些痛苦的。好在有其它板子的开发经验可以借鉴。在下载的支持包中,有例程可以参考,通常从习惯上说,都是从点亮LED开始的,这次也不例外。多说一句,在查找资料的过程中,曾经想着用CubeMX辅助开发,弄了几下,感觉得花点时间学习才行。所以就先放放,直接以GPIO例程为基础,后面一步一步拓展,来实现预想的功能。
从官网下载下来的stm32cube_fw_u5_v111.zip(这个可以通过CubeMX来获得,不需要费力去网上找了,这也是我初次接触CubeMX得到的经验)中包含了GPIO_IOToggle例程,里面有适用于CubeIDE的工程。打开它,做一些必要的修改,然后按照“STM32 C/C++ Application”执行,就能实现下载(事实上如何在CubeIDE中进行下载,我还没学会呢,哈哈哈哈)。 为了方便观察,主程序中的代码我改了下,和原程序有出入。 - <font size="3">int main(void) {
- /* USER CODE BEGIN 1 */
- /* STM32U5xx HAL library initialization:
- - Configure the Flash prefetch
- - Configure the Systick to generate an interrupt each 1 msec
- - Set NVIC Group Priority to 3
- - Low Level Initialization
- */
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* Configure the System Power */
- SystemPower_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_ICACHE_Init();
- /* USER CODE BEGIN 2 */
- /* -1- Enable GPIO Clock (to be able to program the configuration registers) */
- LED7_GPIO_CLK_ENABLE();
- LED6_GPIO_CLK_ENABLE();
- /* -2- Configure IO in output push-pull mode to drive external LEDs */
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.Pin = LED7_PIN;
- HAL_GPIO_Init(LED7_GPIO_PORT, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = LED6_PIN;
- HAL_GPIO_Init(LED6_GPIO_PORT, &GPIO_InitStruct);
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1) {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- HAL_GPIO_TogglePin(LED7_GPIO_PORT, LED7_PIN);
- HAL_GPIO_TogglePin(LED6_GPIO_PORT, LED6_PIN);
- /* Insert delay 100 ms */
- HAL_Delay(500);
- /* USER CODE END 3 */
- }
- }</font>
复制代码
修改的就是USER CODE BEGIN 3和USER CODE END 3之间的代码,运行后可以看到开发板上蓝色按钮的左边的两个LED(红色和绿色)按照程序要求的那样闪烁了。 根据这个开发板的用户手册,我找到了一些相关的资料。 一、开发板的正面和反面
[attach
]1873008[/attach]
二、硬件框图
三、板载传感器配置
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 环境光传感器。在物联网板上,VEML6030 (BU585IIO2A$GTx)或VEML3235 (BU585IIO2A1$GTx)。已安装。
| | | |
3.1、麦克风接口定义
3.2、湿度传感器接口:
3.3、磁力计接口
| INT/DRDY (Mems.INT_IIS2MDC)
| | | | |
3.4、3D加速度计和3D陀螺仪(ISM330DHCX)接口(提供了一个中断端口)
| INT1 (Mems.ISM330DLC_INT1)
| | | | |
3.5、压力传感器接口
| INT/DRDY (Mems.INT_LPS22HH)
| | | | |
3.6、飞行时间测距和姿态检测传感器接口
3.7、用于外围设备和物联网设备的STSAFE认证和安全性(ST safe 10s 8 spl 03),PF11 I/O用于启用或关闭STSAFE:
3.8、按键以及LED配置
I/O
| 标签
| 颜色
| 名称
| 说明
| NRST
| B2
| 黑色
| RST
| 系统复位
| -
| B1
| 黑色
| BT-RST
| 复位蓝牙模块
| PC13
| B3
| 蓝色
| USER
| 用户按钮
| -
| LD3
| 红色+绿色
| COM
| 闪烁或调试时闪烁
| -
| LD4
| 红色
| STLK_OVC
| 当电流高于500毫安时为红色
| PH7
| LD7
| 绿色
| LD7
| 用户LED。PH7=0时亮
| PH6
| LD6
| 红色
| LD6
| 用户LED。PH6=0时亮
| -
| LD5
| 绿色
| PWR
| 5V可用指示
| PE13
| LD2
| 蓝色
| ARD
| ARDUINO® LED。PE13=1时亮。
| -
| LD1
| 绿色
| 5V_USB
| VBUS_C可用时
|
四、STMOD+接口
我准备在这两个接口(CN2和CN3)中寻找合适的GPIO口用来驱动显示屏。
有了这些资料,可以在GPIO例程的基础上进行后续的开发了。下一次,先把显示的部分弄好,方便其后的传感器数据检测和显示。
|