STM32cubeMX STM32F1系列 IIC从机中断接收

 

首先,用cube创建一个F1系列的从机工程。这里我选择了“STM32F103C8T6”型号的单片机最小系统板,封装为LQFP48。

然后使用IIC的话可以分以下几步走:

一、设置烧录模式为Serial wire。按照图中箭头配置烧录模式

STM32cubeMX STM32F1系列 IIC从机中断接收_第1张图片

二、使用外部晶振

STM32cubeMX STM32F1系列 IIC从机中断接收_第2张图片

三、开启IIC

开启IIC中断

STM32cubeMX STM32F1系列 IIC从机中断接收_第3张图片

此处按照红色箭头配置即可。红框框中的要注意配置

四、IIC基础参数设置

STM32cubeMX STM32F1系列 IIC从机中断接收_第4张图片

这里使用标准模式的IIC传输速度,时钟设为1000hz,初级从机地址设为(TBS_I2C_ADDR + SLAVE_ID)。

五、时钟配置

STM32cubeMX STM32F1系列 IIC从机中断接收_第5张图片

六、设置项工程信息

STM32cubeMX STM32F1系列 IIC从机中断接收_第6张图片

七、代码生成项配置

STM32cubeMX STM32F1系列 IIC从机中断接收_第7张图片

设置完这些后即可点击生成代码。

然后打开keil工程,在main.c中添加代码如下:

int main(void)
{
  /* USER CODE BEGIN 1 */
  /* 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();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	printf("slave\n");//上电提示打印
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		HAL_I2C_Slave_Receive_IT(&hi2c1, pData2, sizeof(pData2));//使用中断方式接收
		if (pData2[4] == 'f') {//数据存储区第五个数据为‘f’时使用串口打印“hello”
			printf("hello\n");
			memset(pData2, 0, sizeof(pData2));//执行完标志事件后,将存储区数据清零
		}
  }
  /* USER CODE END 3 */
}

本教程可以配合另篇文章“STM32cubeMX STM32F1系列 IIC主机通讯”使用。
 

你可能感兴趣的:(STM32,硬件开发,STM32cubeMX)