STM32cubeMX STM32F1系列 IIC从机通讯

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

STM32cubeMX STM32F1系列 IIC从机通讯_第1张图片

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

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

STM32cubeMX STM32F1系列 IIC从机通讯_第2张图片

二、使用外部晶振

STM32cubeMX STM32F1系列 IIC从机通讯_第3张图片

三、开启IIC

STM32cubeMX STM32F1系列 IIC从机通讯_第4张图片

此处按照红色箭头配置即可。至于中断,如果不使用中断模式接发数据的话可以不开(本教程不使用中断)。

四、IIC基础参数设置

STM32cubeMX STM32F1系列 IIC从机通讯_第5张图片

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

五、时钟配置

STM32cubeMX STM32F1系列 IIC从机通讯_第6张图片

六、设置项工程信息

STM32cubeMX STM32F1系列 IIC从机通讯_第7张图片

七、代码生成项配置

STM32cubeMX STM32F1系列 IIC从机通讯_第8张图片

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

然后我们打开生成的KEIl代码,我们首先查看keil中,IIC的初始化部分如下:

STM32cubeMX STM32F1系列 IIC从机通讯_第9张图片

记得将红框中部分修改一致。

然后在main.c中添加宏定义如下:

STM32cubeMX STM32F1系列 IIC从机通讯_第10张图片

添加数据存储区

STM32cubeMX STM32F1系列 IIC从机通讯_第11张图片

然后我们在main函数的循环中添加程序如下:

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(&hi2c1, pData2, sizeof(pData2), 10000);//从机接收数据
		if (pData2[4] == 'f') {//如果数据缓冲区第五个数据存入是‘f’,则使用串口打印hello
			printf("hello\n");
			memset(pData2, 0, sizeof(pData2));//在执行完标志事件后,将存储区数据置零。
		}
  }
  /* USER CODE END 3 */
}

编译后即可将程序烧录进单片机。

我在csdn同时上传了配套的从机代码。想看的同学可以移步我的资源去下载。(IIC双机通讯共三篇,此其二)

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