[STM32WB] 【STM32WB09KE测评】-基础任务3-IIC外设驱动

[复制链接]
 楼主| YangTwo 发表于 2024-11-8 12:04 | 显示全部楼层 |阅读模式
<
从STM32WB09KE的数据手册看到,片上外设包含一个I2C:

System peripherals
– 1x DMA controller with 8 channels supporting ADC, SPI, I2C, USART, LPUART, Timers
– 1x SPI with I2S interface multiplexed–
1x I2C (SMBus/PMBus)
– 1x LPUART (low power)
– 1x USART (ISO 7816 smartcard mode, IrDA, SPI master and modbus)
– 1x independent WDG
– 1x real time clock (RTC)
– 1x independent SysTick
– 1x 16-bit, four channels general purpose timer
– 2x 16-bit, two channels general purpose timer
– Infrared interface


从开发板原理图,在母版的CN4连接器上引出了I2C功能引脚。
I2C_SCL PB6 D15 GPIO28
I2C_SDA PB7 D14 GPIO29



因此可以用来驱动I2C接口的屏幕:
Snipaste_2024-11-08_11-58-57.png


接下来初始化I2C模块,
  1. static void MX_I2C1_Init(void)
  2. {

  3.   /* USER CODE BEGIN I2C1_Init 0 */

  4.   /* USER CODE END I2C1_Init 0 */

  5.   /* USER CODE BEGIN I2C1_Init 1 */

  6.   /* USER CODE END I2C1_Init 1 */
  7.   hi2c1.Instance = I2C1;
  8.   hi2c1.Init.Timing = 0x00303D5B;
  9.   hi2c1.Init.OwnAddress1 = 0;
  10.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  11.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  12.   hi2c1.Init.OwnAddress2 = 0;
  13.   hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  14.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  15.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  16.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  17.   {
  18.     Error_Handler();
  19.   }

  20.   /** Configure Analogue filter
  21.   */
  22.   if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }

  26.   /** Configure Digital filter
  27.   */
  28.   if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
  29.   {
  30.     Error_Handler();
  31.   }
  32.   /* USER CODE BEGIN I2C1_Init 2 */

  33.   /* USER CODE END I2C1_Init 2 */

  34. }



初始化RTC模块,
  1. static void MX_RTC_Init(void)
  2. {

  3.   /* USER CODE BEGIN RTC_Init 0 */

  4.   /* USER CODE END RTC_Init 0 */

  5.   RTC_TimeTypeDef sTime = {0};
  6.   RTC_DateTypeDef sDate = {0};

  7.   /* USER CODE BEGIN RTC_Init 1 */

  8.   /* USER CODE END RTC_Init 1 */

  9.   /** Initialize RTC Only
  10.   */
  11.   hrtc.Instance = RTC;
  12.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  13.   hrtc.Init.AsynchPrediv = 127;
  14.   hrtc.Init.SynchPrediv = 255;
  15.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  16.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  17.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
  18.   {
  19.     Error_Handler();
  20.   }

  21.   /* USER CODE BEGIN Check_RTC_BKUP */

  22.   /* USER CODE END Check_RTC_BKUP */

  23.   /** Initialize RTC and set the Time and Date
  24.   */
  25.   sTime.Hours = 0x12;
  26.   sTime.Minutes = 0x0;
  27.   sTime.Seconds = 0x0;
  28.   sTime.SubSeconds = 0x0;
  29.   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  30.   sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  31.   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  32.   {
  33.     Error_Handler();
  34.   }
  35.   sDate.WeekDay = RTC_WEEKDAY_FRIDAY;
  36.   sDate.Month = RTC_MONTH_NOVEMBER;
  37.   sDate.Date = 0x08;
  38.   sDate.Year = 0x24;

  39.   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  40.   {
  41.     Error_Handler();
  42.   }
  43.   /* USER CODE BEGIN RTC_Init 2 */

  44.   /* USER CODE END RTC_Init 2 */

  45. }

主程序:
  1. int main(void)
  2. {

  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* MCU Configuration--------------------------------------------------------*/

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

  8.   /* USER CODE BEGIN Init */

  9.   /* USER CODE END Init */

  10.   /* Configure the system clock */
  11.   SystemClock_Config();

  12.   /* Configure the peripherals common clocks */
  13.   PeriphCommonClock_Config();

  14.   /* USER CODE BEGIN SysInit */

  15.   /* USER CODE END SysInit */

  16.   /* Initialize all configured peripherals */
  17.   MX_GPIO_Init();
  18.   MX_I2C1_Init();
  19.   MX_RTC_Init();
  20.   /* USER CODE BEGIN 2 */
  21.   OLED_Init();
  22.   OLED_Refresh();
  23.   HAL_Delay(500);
  24.   /* USER CODE END 2 */

  25.   /* Initialize leds */
  26.   BSP_LED_Init(LED_BLUE);
  27.   BSP_LED_Init(LED_GREEN);
  28.   BSP_LED_Init(LED_RED);

  29.   /* Initialize USER push-button, will be used to trigger an interrupt each time it's pressed.*/
  30.   BSP_PB_Init(B1, BUTTON_MODE_EXTI);
  31.   BSP_PB_Init(B2, BUTTON_MODE_EXTI);
  32.   BSP_PB_Init(B3, BUTTON_MODE_EXTI);

  33.   /* Initialize COM1 port (115200, 8 bits (7-bit data + 1 stop bit), no parity */
  34.   BspCOMInit.BaudRate   = 115200;
  35.   BspCOMInit.WordLength = COM_WORDLENGTH_8B;
  36.   BspCOMInit.StopBits   = COM_STOPBITS_1;
  37.   BspCOMInit.Parity     = COM_PARITY_NONE;
  38.   BspCOMInit.HwFlowCtl  = COM_HWCONTROL_NONE;
  39.   if (BSP_COM_Init(COM1, &BspCOMInit) != BSP_ERROR_NONE)
  40.   {
  41.     Error_Handler();
  42.   }

  43.   /* Infinite loop */
  44.   /* USER CODE BEGIN WHILE */
  45.   printf("\r\n LED, Button, COM all Init Done");
  46.   while (1)
  47.   {

  48.     /* USER CODE END WHILE */

  49.     /* USER CODE BEGIN 3 */
  50.           static uint8_t i;
  51.           printf("\r\n idle main loop, current date: %s, current time: %s", aShowDate, aShowTime);
  52.           //printf("\r\nOLED TEST MODE: CLEAR SCREEN AND REFRESH WITH 1000ms DELAY. (%d)", i++);
  53.           OLED_Clear();
  54.           OLED_ShowString(0,0,"OLED SIMPLE CLOCK",8,1);
  55.           OLED_ShowString(0,12,"STM32 WB09KE",8,1);
  56.           OLED_ShowString(12,24,"BBS.21IC ST",16,1);
  57.           OLED_ShowString(0,48,aShowDate,8,1);
  58.           OLED_ShowString(80,48,aShowTime,8,1);
  59.           OLED_Refresh();


  60.           RTC_CalendarShow(aShowTime, aShowDate);

  61.           HAL_Delay(100);
  62.   }
  63.   /* USER CODE END 3 */
  64. }


烧录,最终效果:


3eebcbaa5adf42d9925fa3e2a3f5943f3493094766938966.jpg



顽强de板子 发表于 2024-11-28 23:35 | 显示全部楼层
在开始IIC外设驱动开发之前,确保你已经完成了开发环境的搭建,包括IDE、编译器、固件库和中间件的安装
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

110

帖子

1

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

27

主题

110

帖子

1

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