搜索
查看: 1873|回复: 3

[原创] STM32F103C8 UART1, I2C1, CAN冲突

[复制链接]

该用户从未签到

1

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2021-3-12
发表于 2021-3-11 09:15:10 | 显示全部楼层 |阅读模式
ST芯片型号: STM32F103C8T6
PB7,PB6用于UART1
PB8,PB9用于做CAN.
问题:I2C1_REMAP关闭,影响PB7,PB6的UART1功能,导致UART1不能发送
I2C1_REMAP打开,影响PB9,PB8的CAN功能,导致CAN TX不能发送

具体如下:
使用PB7,PB6做IO口,需要做如下映射,才可以UART1, tx,rx正常工作:
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE); //Must remap I2C1, otherwise PB6 conficts

如果:
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
为disable,uart1 tx不能发送,rx接收正常.
根据芯片手册,也正常


复用功能       I2C1_REMAP = 0    I2C1_REMAP = 1   
I2C1_SCL         PB6                        PB8
I2C1_SDA        PB7                        PB9


复用功能              USART1_REMAP = 1   
USART1_TX                    PB6
USART1_RX                    PB7


由于PB6,PB7已经用于UART1, 所以需要将 I2C1_REMAP设置为1,切换到PB8,PB9.

但是PB8,PB9做can时,又与I2C1冲突了,导致PB9 can不能发送,但PB8 can接收正常.


复用功能              CAN_REMAP[1:0]=”10”
CAN1_RX                    PB8
CAN1_TX                    PB9


怎样能解决这个冲突呢,是芯片设计bug吗?

谢谢!












1615425524.png
1615426379(1).png
回复

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2021-3-11 10:02:02 | 显示全部楼层
复用功能只能选择一个,串口1可以选择A9 A10,为什么要选择复用后的引脚呢?
回复 支持 反对

使用道具 举报

该用户从未签到

26

主题

1127

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-7-29
发表于 2021-3-11 10:08:17 | 显示全部楼层
将各个功能分配给不同的引脚,也就是说每个引脚只承担一个功能,就不会出现冲突的现象了。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

23

帖子

0

蝴蝶豆

中级会员

最后登录
2021-12-9
发表于 2021-3-11 11:12:46 | 显示全部楼层
为避免冲突,在使用引脚的复用功能时,只选择一个外设模块,要么USART要么CAN。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-20 07:38 , Processed in 0.184620 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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