OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4426|回复: 3

关于原子哥的 软件IIC代码移植

[复制链接]

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2021-2-4
在线时间
146 小时
发表于 2021-8-2 11:28:41 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 电子控2021 于 2021-8-2 11:32 编辑


111行的这个IIC_SDA原本宏定义是PCout(11)我现在改成了这样,因为我用的是HAL库
IIC_SDA(state) HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11, state) //SDA

所以想问一下各位大佬
这个111行是什么意思
有什么作用 如何改成HAL库的代码

屏幕截图 2021-08-02 112952.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2016-10-23
在线时间
262 小时
发表于 2021-8-2 11:48:03 | 显示全部楼层
这段代码是从参数txd的高位先发送。
假设txd=0xf0;
1、txd&0x80=0xf0 & 0x80=0x10;  取第7位的状态,
2、(txd&0x80)>>7; 等于  0x10>>7=0x01;  将结果放置在第0位。
3、IIC_SDA=0x01; 等于  IIC_SDA=1;
4、txd<<=1;
有8位数据,所以下面还有一行 txd<<=1;将第6位数据挪到第7位。
然后跑这个过程循环8次  发送完成。
可以代数据进去手算、debug都能了解这些过程。
6年嵌入式老玩家 深圳
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-8-2 14:32:05 | 显示全部楼层
用HAL库更简单了。直接配置SDA浮空,外部加上拉电阻,输入输出随意了,不需要每次读写重新再配置SDA输入输出。
回复

使用道具 举报

0

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2016-10-23
在线时间
262 小时
发表于 2021-8-3 22:53:52 | 显示全部楼层
没注意你还有一问,最快的办法 找到HAL库下 stm32f1xx_hal_i2c.h 从最底下往上找下,看函数名称就能知道干嘛用的,旁边还有一些英文注释的,找到函数实体处,在函数之前有详细的注释。
这是教你方法。
下面是答案:主机
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); 普通方式主机发送
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);普通方式主机接收

带中断
HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);

带dma
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);


6年嵌入式老玩家 深圳
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 03:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表