[STM32F1] STM32F103的PC13,PC14,PC15无法保持高电平输出

[复制链接]
6375|17
 楼主| zhxingyu 发表于 2019-12-17 08:35 | 显示全部楼层 |阅读模式
芯片是STM32F103RC,用到PC13和PC14脚驱动CD4052,在网上查询了很多方法,如下代码,仍然无法输出高电平,请教大家还有什么原因引起的?GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(( RCC_APB2Periph_GPIOC |  RCC_APB2Periph_AFIO), ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14 | GPIO_Pin_15;               
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;


PWR_BackupAccessCmd(ENABLE);//ÔÊÐíÐÞ¸ÄRTCºÍºó±¸¼Ä´æÆ÷
RCC_LSEConfig(RCC_LSE_OFF);//¹Ø±ÕÍⲿµÍËÙʱÖÓ£¬PC13\PC14\PC15¿ÉÓÃ
BKP_TamperPinCmd(DISABLE);//¹Ø±ÕÈëÇÖ¼ì²â¹¦ÄÜPC13ÓÃGPIO
PWR_BackupAccessCmd(DISABLE);//½ûÖ¹ÐÞ¸ÄRTCºÍºó±¸¼Ä´æÆ÷
GPIO_Init(GPIOC, &GPIO_InitStructure);

sonicll 发表于 2019-12-17 09:51 | 显示全部楼层
你前面的程序有打开过LSE和TAMPER吗,这两个功能默认都是关闭的,不用配置,直接配好PC13,14,15的GPIO就能用。
如果你之前打开过LSE和TAMPER,那关闭tamper还需要打开pwr和bkp的时钟:
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE);       
        PWR_BackupAccessCmd(ENABLE);
        RCC_LSEConfig(RCC_LSE_OFF);
        BKP_TamperPinCmd(DISABLE);       
        PWR_BackupAccessCmd(DISABLE);
你最好在仿真状态下看看LSE和tamper到底是使能的还是关闭的
hanzhen654 发表于 2019-12-17 10:01 | 显示全部楼层
无法保持?可以输出吗?是不是端口复用了?
mmuuss586 发表于 2019-12-17 10:02 | 显示全部楼层
用CUBE配置下看看,更简单;

另外这几个引脚和JTAG好像有关,需要设置下
 楼主| zhxingyu 发表于 2019-12-17 10:37 | 显示全部楼层
sonicll 发表于 2019-12-17 09:51
你前面的程序有打开过LSE和TAMPER吗,这两个功能默认都是关闭的,不用配置,直接配好PC13,14,15的GPIO就 ...

之前没有打开过LSE和TAMPER,突然想到调用下面几个函数,需要打开RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE); 这两个时钟才对,打开试试!
 楼主| zhxingyu 发表于 2019-12-17 10:39 | 显示全部楼层
hanzhen654 发表于 2019-12-17 10:01
无法保持?可以输出吗?是不是端口复用了?

是的,无法保持,按上面代码初始化后,把PC14置高,下断点用万用表测PC14脚有高电平输出,但保持4秒左右就又变成低电平了。
hanzhen654 发表于 2019-12-17 10:42 | 显示全部楼层
zhxingyu 发表于 2019-12-17 10:39
是的,无法保持,按上面代码初始化后,把PC14置高,下断点用万用表测PC14脚有高电平输出,但保持4秒左右 ...

是端口复用了?还是默认是SWD 或者JTAG使用了
 楼主| zhxingyu 发表于 2019-12-17 11:08 | 显示全部楼层
hanzhen654 发表于 2019-12-17 10:42
是端口复用了?还是默认是SWD 或者JTAG使用了

这三个脚给SWD或JTAG有关系吗?仿真用的是SWD。
hjl2832 发表于 2019-12-17 12:52 | 显示全部楼层
如果要当普通IO、需要在设置里配置JTAG功能关闭,调试选用swd模式,否则,这些IO默认是JTAG功能。
東南博士 发表于 2019-12-17 13:03 | 显示全部楼层
取消JTAG,使能SWD即可!
yklstudent 发表于 2019-12-17 13:36 | 显示全部楼层
芯片手册有这么句话:
5、PC13, PC14 and PC15 are supplied through the power switch. Since the switch only sinks a limited amount of current (3
mA), the use of GPIOs PC13 to PC15 in output mode is limited: the speed should not exceed 2 MHz with a maximum load of
30 pF and these IOs must not be used as a current source (e.g. to drive an LED).
英文不好可以百度翻译,应该可以理解啥意思
香水城 发表于 2019-12-18 23:42 | 显示全部楼层
注意下有无复用冲突的情况,这点用CubeMx配置比较方便;
另外就是楼上提醒的那几个管脚比较特殊,输出的驱动能力及输出速率都很有限。
磨砂 发表于 2020-1-15 14:17 | 显示全部楼层
是不是后续程序哪里又对她进行操作了
晓伍 发表于 2020-1-15 14:41 | 显示全部楼层
这段英文是啥意思啊
八层楼 发表于 2020-1-15 14:47 | 显示全部楼层
能在瞬间输出 但是就是无法保持 是吗
观海 发表于 2020-1-15 14:52 | 显示全部楼层
把别的代码都取消 只留下io的代码试试看
guanjiaer 发表于 2020-1-15 15:00 | 显示全部楼层
别的代码有没有操作这俩引脚啊
heimaojingzhang 发表于 2020-1-15 15:03 | 显示全部楼层
楼主解决问题了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

309

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部