OpenEdv-开源电子网

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

STM8L151x4引脚PC4无法正常输出高低电平

[复制链接]

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
发表于 2017-2-28 13:45:38 | 显示全部楼层 |阅读模式
3金钱
如题,再用STM8L151x4芯片,想要用引脚PC4作为通用IO口输出高低电平,但是无法正常输出。用万用表测的时候发现电平时钟在1.5V、1.6V左右,拉高也无法拉高,拉低也无法拉低,
一开始用的推挽输出,发现没用,给焊接了一个10K的上拉电阻改用开漏输出,还是不行。
板子上现在外漏的引脚有PC0、1、2、3、4,PC0123都可以正常拉高拉低,但是唯独PC4不行,
求大神围观。


难道默认不是通用GPIO口的功能,而是其他功能比如USART1之类的?


附图是我从手册里摘出来的STM8L151的PC4的引脚功能描述。
这是我的部分程序:
[mw_shl_code=applescript,true]
GPIO_Init(GPIOC, GPIO_Pin_4, GPIO_Mode_Out_PP_Low_Slow);

  while(1)
  {
       GPIO_ResetBits(GPIOC, GPIO_Pin_4);
       Delay(0x0FF);
       Delay(0x0FF);


       GPIO_SetBits(GPIOC, GPIO_Pin_4);
       Delay(0x0FF);
       Delay(0x0FF);
}
[/mw_shl_code]




STM8 - PC4.png

最佳答案

查看完整内容[请看2#楼]

已解决。 问题原因: 如一楼数据手册图片所示,PC4引脚有一个功能是usart1的时钟控制功能,而程序里面最开始进入while(1)之前初始化的时候有这一句: [mw_shl_code=c,true]CLK_CCOConfig(CLK_CCOSource_HSI,CLK_CCODiv_64);[/mw_shl_code] 追了一下代码,发现这个函数的介绍: [mw_shl_code=c,true]/** * @brief Selects the clock source to output on CCO pin(PC4). * @note PC4 should be configured ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-2-28 13:45:39 | 显示全部楼层
本帖最后由 lsy3500 于 2017-3-1 09:05 编辑

已解决。
问题原因:
      如一楼数据手册图片所示,PC4引脚有一个功能是usart1的时钟控制功能,而程序里面最开始进入while(1)之前初始化的时候有这一句:
[mw_shl_code=c,true]CLK_CCOConfig(CLK_CCOSource_HSI,CLK_CCODiv_64);[/mw_shl_code]
      追了一下代码,发现这个函数的介绍:
[mw_shl_code=c,true]/**
  * @brief  Selects the clock source to output on CCO pin(PC4).
  * @note   PC4 should be configured output push-pull with the speed that matches
  *         maximum output speed of the desired clock.
  * @param  CLK_CCOSource: specifies the clock source to output.
  *          This parameter can be one of the following values:
  *            @arg CLK_CCOSource_Off: No clock selected as CCO source
  *            @arg CLK_CCOSource_HSI: HSI clock selected as CCO source
  *            @arg CLK_CCOSource_LSI: LSI clock selected as CCO source
  *            @arg CLK_CCOSource_LSE: LSE clock selected as CCO source
  *            @arg CLK_CCOSource_HSE: HSE clock selected as CCO source
  * @param  CLK_CCODiv: specifies the CCO prescaler.
  *          This parameter can be one of the following values:
  *            @arg CLK_CCODiv_1: no division applied to CCO clock
  *            @arg CLK_CCODiv_2: division by 2 applied to CCO clock
  *            @arg CLK_CCODiv_4: division by 4 applied to CCO clock
  *            @arg CLK_CCODiv_8: division by 8 applied to CCO clock
  *            @arg CLK_CCODiv_16: division by 16 applied to CCO clock
  *            @arg CLK_CCODiv_32: division by 32 applied to CCO clock
  *            @arg CLK_CCODiv_64: division by 64 applied to CCO clock
  * @retval None
  */
void CLK_CCOConfig(CLK_CCOSource_TypeDef CLK_CCOSource, CLK_CCODiv_TypeDef CLK_CCODiv)
{
  /* check teh parameters */
  assert_param(IS_CLK_OUTPUT(CLK_CCOSource));
  assert_param(IS_CLK_OUTPUT_DIVIDER(CLK_CCODiv));

  /* Selects the source provided on cco_ck output and its divider*/
  CLK->CCOR = (uint8_t)((uint8_t)CLK_CCOSource | (uint8_t)CLK_CCODiv);
}[/mw_shl_code]
可以看到,这个函数的作用是选择PC4作为输出时钟源,所以PC4不再是通用IO口输出了。

至于无法拉高也无法拉低的情况,原因猜想:
      因为是时钟输出,所以输出为周期性的方波,也就是用万用表测的时候,测出来的是平均值,所以测出来是1.5V、1.7V左右(约为0V~3.3V的中间值),电平即无法拉高也无法拉低。
     (PS:事实上,可能拉高拉低的时候成功了,但是因为PC4现在设置成了时钟输出周期性的方波,所以即使拉高了一瞬间,他又开始输出方波,所以没有看到拉高或者拉低那一瞬间而已。因为身边暂时没有示波器,所以也没法看波形,所以才想应该就是这个原因了。)
      
回复

使用道具 举报

557

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165046
金钱
165046
注册时间
2010-12-1
在线时间
2102 小时
发表于 2017-2-28 22:10:09 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2014-10-22
在线时间
1 小时
发表于 2017-3-2 13:05:17 | 显示全部楼层
学习了,长知识了,谢谢!!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-28 22:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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