本帖最后由 haiyu 于 2017-1-13 19:23 编辑
最近几天学cube 写个I2c主从通讯
主机发送一个地址位上总线 对应地址位的从机发送一组数据到总线上;
主机通过i2c读取多个stm32f030F4 采集ADC值
ps : 从机例子只能固定发送数据 不能读主机数据
只能说玩玩而已 切勿商用
主机查询某一地址 然后在串口中打印:
- printf("add: %d
",add);
- ERROR_data=HAL_I2C_Master_Receive(&hi2c1,add,I2c_Buf_Read,20,2000);
- if(ERROR_data==HAL_TIMEOUT)
- {
- MX_I2C1_Init();
- __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
- printf("I2C超时错误
");
- }else if( ERROR_data==HAL_ERROR)
- {
- __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
- printf("I2C错误
");
- }
- else if(ERROR_data==HAL_BUSY)
- {
- __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
- printf("I2C总线忙
");
- }
-
- HAL_Delay(1000);
- for (i=0;i<20;i++)
- {
- printf("0x%02X ", I2c_Buf_Read[i]);
- //I2c_Buf_Read[i]=0;
- }
- printf("
");
- for (i=0;i<20;i++)
- {
- I2c_Buf_Read[i]=0;
- }
-
复制代码
从机用cube配置好波特率 上下时间 地址位 开 I2c中断
用中断函数在大循环里不断发送
HAL_I2C_Slave_Transmit_IT(&hi2c1,&I2c_Buf_Write[0],20); //发送数据
从而实现I2c主从通讯 ;
附件有cube配置生成的工程
注意总线上要焊接4.7~10K的上拉电阻
cubemx
st的初始化软件 用它可以配置好初始化的流程 让你直接去写代码 而不用考虑底层的东西 不用去看寄存器了~~
好早以前想学stm32 但看了一对堆的手册寄存器就放弃了 现在用这个已配置好 然后就写几个回调函数就可以用了
但其效率低了 不过上手容易了 起码有信心去搞程序 不用考虑配置问题~
一周热门 更多>