STM32F103的PC13,PC14,PC15无法保持高电平输出
STM32F103的PC13,PC14,PC15无法保持高电平输出楼主详细说说怎么回事啊,这么说太笼统了 芯片是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); 你前面的程序有打开过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到底是使能的还是关闭的 无法保持?可以输出吗?是不是端口复用了?
用CUBE配置下看看,更简单;
另外这几个引脚和JTAG好像有关,需要设置下
之前没有打开过LSE和TAMPER,突然想到调用下面几个函数,需要打开RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE); 这两个时钟才对,打开试试! 是的,无法保持,按上面代码初始化后,把PC14置高,下断点用万用表测PC14脚有高电平输出,但保持4秒左右就又变成低电平了。
是端口复用了?还是默认是SWD 或者JTAG使用了
这三个脚给SWD或JTAG有关系吗?仿真用的是SWD。
如果要当普通IO、需要在设置里配置JTAG功能关闭,调试选用swd模式,否则,这些IO默认是JTAG功能。
取消JTAG,使能SWD即可!
芯片手册有这么句话:
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).
英文不好可以百度翻译,应该可以理解啥意思 注意下有无复用冲突的情况,这点用CubeMx配置比较方便;
另外就是楼上提醒的那几个管脚比较特殊,输出的驱动能力及输出速率都很有限。
是不是后续程序哪里又对她进行操作了
这段英文是啥意思啊
能在瞬间输出 但是就是无法保持 是吗
把别的代码都取消 只留下io的代码试试看
页:
[1]
2