[STM32WB] 【STM32WB09KE测评】+RTC,UART试用以及点亮OLED屏,并显示时间

[复制链接]
 楼主| stb988 发表于 2024-10-31 18:53 | 显示全部楼层 |阅读模式
本帖最后由 stb988 于 2024-10-31 18:53 编辑

#申请开发板#              距离发布第一篇评测帖子也有几天了,【STM32WB09KE测评】+开箱环境搭建及点亮LED,跳转到上一帖子https://bbs.21ic.com/icview-3409534-1-1.html,这几天一有空就来学习研究这个开发板,今天我就测试了OLED驱动和RTC时钟调用与显示。

        先来上个图看看,下面就是我测试显示出来的时间。
         IMG_20241031_181909.jpg
oled屏用的iic通信,接在开发板的34号和36号引脚。
IMG_20241031_181923.jpg
下面是接的3.3V 和GND
IMG_20241031_181931.jpg
IMG_20241031_181914.jpg
之前调试用硬件IIC通信,但是也不知道怎么回事?一直没有设调对,索性先改用软件模拟IIC,把SCL配置到PA0,把SDA配置到PB14,再把uart也开启,RTC也开启,下面是STM32CubeMX配置的界面
屏幕截图 2024-10-31 182507.png
下面就是根据mcu引脚,把到开发板对应的针脚 ,翻出电路图
屏幕截图 2024-10-31 183216.png
再根据引脚标识,是user1和user3,
屏幕截图 2024-10-31 183301.png
再找底板上的引脚
屏幕截图 2024-10-31 183332.png
最后接上OLED屏,把oled驱动移植过来,但是并不能显示出字符,最后发现是IO口切换过快,数据失真了,如是加了一个延时函数,为了防止被编译器优化掉,代码如下
  1. void IIC_delay(void)
  2. {
  3.     volatile u16 t = 100;
  4.     while(t--);
  5. }
复制代码
再把串口的printf改写一下,把这代码添加到uart.c文件中
  1. int fputc(int ch, FILE *f) {
  2.     HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  3.     return ch;
  4. }
复制代码
还有一个地方不要忘记,必须把下面这里勾上,
屏幕截图 2024-10-31 184154.png

屏幕截图 2024-10-31 182742.png
最后就是测试RTC了
HAL初始化时,已经帮我们都初始化了,只要调用就可以了
RTC 时间和日期数据保存在 RTC_TimeTypeDef 和 RTC_DateTypeDef 结构体中。在需要读取的函数或主程序中定义这些结构体:
  1. RTC_TimeTypeDef sTime;
  2. RTC_DateTypeDef sDate;
复制代码
使用 HAL_RTC_GetTime 和 HAL_RTC_GetDate 函数来读取时间和日期。
  1. HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);   // 获取时间
  2. HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);   // 获取日期
复制代码
读取的时间和日期数据保存在 sTime 和 sDate 结构体的成员中,
  1. uint8_t hours = sTime.Hours;
  2. uint8_t minutes = sTime.Minutes;
  3. uint8_t seconds = sTime.Seconds;
  4. uint8_t day = sDate.Date;
  5. uint8_t month = sDate.Month;
  6. uint8_t year = sDate.Year;
复制代码
最后全部代码如下
  1. int main(void)
  2. {

  3.   /* USER CODE BEGIN 1 */
  4.     RTC_TimeTypeDef sTime;
  5.     RTC_DateTypeDef sDate;
  6.                 uint8_t hours = sTime.Hours;
  7.                 uint8_t minutes = sTime.Minutes;
  8.                 uint8_t seconds = sTime.Seconds;
  9.                 uint8_t day = sDate.Date;
  10.                 uint8_t month = sDate.Month;
  11.                 uint8_t year = sDate.Year;
  12.   /* USER CODE END 1 */

  13.   /* MCU Configuration--------------------------------------------------------*/

  14.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  15.   HAL_Init();

  16.   /* USER CODE BEGIN Init */

  17.   /* USER CODE END Init */

  18.   /* Configure the system clock */
  19.   SystemClock_Config();

  20.   /* Configure the peripherals common clocks */
  21.   PeriphCommonClock_Config();

  22.   /* USER CODE BEGIN SysInit */

  23.   /* USER CODE END SysInit */

  24.   /* Initialize all configured peripherals */
  25.   MX_GPIO_Init();
  26.   MX_USART1_UART_Init();
  27.   MX_RTC_Init();
  28.   /* USER CODE BEGIN 2 */
  29.     OLED_Init();
  30.     OLED_Clear();
  31.   /* USER CODE END 2 */

  32.   /* Infinite loop */
  33.   /* USER CODE BEGIN WHILE */
  34.   while (1)
  35.   {
  36.                           printf("starting");
  37.                     OLED_ShowChinese(18,0,0,16,1);//
  38.         OLED_ShowChinese(38,0,1,16,1);//
  39.         OLED_ShowChinese(54,0,2,16,1);//
  40.         OLED_ShowChinese(72,0,3,16,1);//
  41.         OLED_ShowChinese(88,0,4,16,1);//
  42.         OLED_ShowString(8,16,(uint8_t *)"ZHONGJINGYUAN",16,1);
  43.                     // 获取时间和日期
  44.                                 HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
  45.                                 HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
  46.                      
  47.                     sprintf(disbuf,"Time: %02d:%02d:%02d\n", sTime.Hours, sTime.Minutes, sTime.Seconds);
  48.                                 OLED_ShowString(8,32,(uint8_t *)disbuf,16,1);
  49.                
  50.                                 sprintf(disbuf,"Date:20%02d-%02d-%02d\n",sDate.Year,sDate.Month, sDate.Date);
  51.                                 OLED_ShowString(8,48,(uint8_t *)disbuf,16,1);
  52.         OLED_Refresh();
  53.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_4);
  54.         HAL_Delay(100);
  55.     /* USER CODE END WHILE */

  56.     /* USER CODE BEGIN 3 */
  57.   }
  58.   /* USER CODE END 3 */
  59. }
复制代码
以上就是对IIC,RTC,还有UART的测试。
kkzz 发表于 2024-11-12 09:44 | 显示全部楼层
STM32WB09KE开发板具有强大的功能和丰富的接口
bartonalfred 发表于 2024-11-13 16:37 | 显示全部楼层
STM32WB09KE内置RTC模块,可以在系统掉电后继续运行,保持时间的连续性。
 楼主| stb988 发表于 2024-11-14 08:49 | 显示全部楼层
bartonalfred 发表于 2024-11-13 16:37
STM32WB09KE内置RTC模块,可以在系统掉电后继续运行,保持时间的连续性。

要安装备用电源才行的
alvpeg 发表于 2024-11-14 16:54 | 显示全部楼层
STM32WB09KE是一款基于ARM Cortex-M4内核的微控制器,具备多种通信接口和外设功能。
nomomy 发表于 2024-11-17 22:21 | 显示全部楼层
通过编程可以方便地设置当前时间和日期,并且可以通过外部中断或定时器来更新显示的时间。
mikewalpole 发表于 2024-11-20 11:18 | 显示全部楼层
通过合理的配置和编程,可以实现高精度的时间显示和可靠的串行通信功能。
backlugin 发表于 2024-11-20 19:39 | 显示全部楼层
STM32WB09KE通常通过I2C或SPI接口连接OLED屏,接线简单,易于集成。
abotomson 发表于 2024-11-20 20:22 | 显示全部楼层
STM32WB09KE是基于ARM Cortex-M4内核的微控制器,具有丰富的外设接口和强大的处理能力,适用于物联网和嵌入式系统应用。
pmp 发表于 2024-11-20 20:59 | 显示全部楼层
RTC是一个独立的定时器,拥有一个连续计数的计数器,可以在相应的软件配置下提供时钟日历的功能。STM32WB09KE的RTC功能包括计时和提供当前的时间和日期。
hilahope 发表于 2024-11-21 13:13 | 显示全部楼层
使用STM32CubeMX进行初始化配置,包括时钟设置、外设初始化等。
backlugin 发表于 2024-11-21 14:37 | 显示全部楼层
STM32WB09KE是一款低功耗蓝牙无线SoC开发板,内嵌了符合蓝牙低功耗SIG规范v5.4的强大且超低功耗的无线电模块。该开发板在STM32F723开发板的基础上插接了相应的无线模块,拥有先进的2.4GHz射频外设、长电池寿命,并支持多种连接与应用。其内核为Arm Cortex-M0+微处理器及协处理器,具备强大的安全硬件支持和可配置性,适用于多种应用场景。
everyrobin 发表于 2024-11-21 20:58 | 显示全部楼层
RTC模块设计为低功耗模式,适合需要长时间运行的电池供电设备。
zerorobert 发表于 2024-11-22 15:49 | 显示全部楼层
OLED屏是一种有机发光二极管显示屏,具有低功耗、高对比度和快速响应等优点。在STM32WB09KE上,可以通过I2C或SPI等通信接口来控制OLED屏的显示。
jonas222 发表于 2024-11-22 18:21 | 显示全部楼层
STM32WB09KE是一款低功耗蓝牙无线SoC开发板,内嵌了符合蓝牙低功耗SIG规范v5.4的无线电模块。它拥有先进的2.4GHz射频外设、长电池寿命,并支持多种连接与应用。其内核为Arm Cortex-M0+微处理器及协处理器,安全硬件支持强,可配置多种应用,存储与数据传输出色。此外,它内置功能丰富(如ADC、RTC等),通信接口多样,工作环境适应性好。
1988020566 发表于 2024-11-24 09:03 | 显示全部楼层
UART是一种通用异步收发传输器,它将要传输的资料在串行通信与并行通信之间加以转换。在STM32WB09KE上,UART通常被用作与其他设备的串行通信接口。
kkzz 发表于 2024-11-24 09:32 | 显示全部楼层
在STM32WB09KE上,RTC的初始化过程包括配置RTC的参数(如小时格式、异步预分频器、同步预分频器、输出状态等),并检查初始化是否成功。随后,可以设置RTC的时间和日期,并确保设置成功。在需要读取时间和日期时,可以使用相应的函数来获取存储在RTC_TimeTypeDef和RTC_DateTypeDef结构体中的时间和日期数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

393

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部