3108|2

297

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【沁恒RISC-V内核 CH582】 3 电灯例程及按键获取初试 [复制链接]

  本帖最后由 kit7828 于 2022-3-13 18:02 编辑

CH582的Demo例程感觉还是比较简单的,虽然可查阅的资料不多(或许没有去官方网站找资源吧)

试了点灯例程,以及PWM亮度调整例程,均比较顺利

以下是代码

#include "CH58x_common.h"

void DebugInit( void )
{
  GPIOA_SetBits( GPIO_Pin_9 );
  GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );
  UART1_DefInit();
}

int main()
{
  unsigned char key = 0;
  unsigned char duty = 0;

  SetSysClock( CLK_SOURCE_PLL_60MHz );

  /* 配置GPIO */
  DelayMs( 2000 );

  GPIOB_ModeCfg( GPIO_Pin_2, GPIO_ModeIN_Floating );    // PB2 - KEY

  //GPIOB_ModeCfg( GPIO_Pin_6, GPIO_ModeOut_PP_5mA );    // PB6 - PWM8  LED1
  GPIOB_ModeCfg( GPIO_Pin_7, GPIO_ModeOut_PP_5mA );    // PB7 - PWM9  LED2

  PWMX_CLKCfg( 4 );                   // cycle = 4/Fsys
   PWMX_CycleCfg( PWMX_Cycle_64 );     // 周期 = 64*cycle
  /* 配置串口调试 */
  DebugInit();
  PRINT( "Start @ChipID=%02x\n", R8_CHIP_ID );
   //PWMX_ACTOUT( CH_PWM8, 64 / 4, Low_Level, ENABLE );     // 25% 占空比               [ ( 64 / 4)    /    周期64   =  25% ]
  PWMX_ACTOUT( CH_PWM9, 64 / 4, Low_Level, ENABLE );     // 25% 占空比

  while( 1 ){
      /* GPIOB端口引脚状态,0-引脚低电平,(!0)-引脚高电平 */

      PRINT( "GPIOB_ReadPortPin( GPIO_Pin_2 ) = %d \r\n", GPIOB_ReadPortPin( GPIO_Pin_2 ));
      DelayMs( 1000 );
      GPIOB_InverseBits(GPIO_Pin_6);    //LED1 翻转
      duty += 16;
      if(duty > 64) duty = 0;
      PWMX_ACTOUT( CH_PWM9, duty, Low_Level, ENABLE );  //亮度增加25%

  }
}

电灯比较正常,PWM虽然不是很明显,但是还是可以看到有变化的,只是在读取按键的时候出现了问题

开发板上提供的资料是PB4

 但是在实际检测的时候,发现很糟糕,一直判断不了是不是按键了。

以为是电路元件松动等问题,改成PB2杜邦线直接接插3.3V和GND来检测

插上3.3V的时候,还是能够获得GPIOB_ReadPortPin( GPIO_Pin_2 )的值为1,但是一旦松开杜邦线,数值就自己跳了

一会高电平,一会低电平

 这个数据显示的过程,杜邦线是悬空的。

插上3.3V和GND的时候还是正常的。

另外,发现代码一开始就配置串口的话,会导致下载到芯片的时候(串口下载),很难成功,所以程序开始延迟了2秒,再设置串口。

按键的问题,经过多次折腾,终于找到了问题,就是GPIO的模式中不要设置浮空输入,一定要设置成上拉或者下拉。

下面的代码是折腾后确定的代码,基本实现了期初的想法。

int main()
{
  unsigned key = 0;
  unsigned char duty = 0;

  SetSysClock( CLK_SOURCE_PLL_60MHz );

  /* 配置GPIO */
  DelayMs( 2000 );  //此处延时为了串口能够顺利下载
  //此处一定要设置上拉,不能浮空,否则检测会错乱
  GPIOB_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_PU );    // PB4 - KEY

  GPIOB_ModeCfg( GPIO_Pin_6, GPIO_ModeOut_PP_5mA );    // PB6 - PWM8  LED1
  GPIOB_ModeCfg( GPIO_Pin_7, GPIO_ModeOut_PP_5mA );    // PB7 - PWM9  LED2

  PWMX_CLKCfg( 4 );                   // cycle = 4/Fsys
   PWMX_CycleCfg( PWMX_Cycle_64 );     // 周期 = 64*cycle
  /* 配置串口调试 */
  DebugInit();
  PRINT( "Start @ChipID=%02x\n", R8_CHIP_ID );
   //PWMX_ACTOUT( CH_PWM8, 64 / 4, Low_Level, ENABLE );     // 25% 占空比               [ ( 64 / 4)    /    周期64   =  25% ]
  PWMX_ACTOUT( CH_PWM9, 16 / 4, Low_Level, ENABLE );     // 1/16% 占空比

  while( 1 ){
      /* GPIOB端口引脚状态,0-引脚低电平,(!0)-引脚高电平 */

      if(GPIOB_ReadPortPin( GPIO_Pin_4 )) {  //高电平,按键释放
          if(key & 0x40) key = 0x80;
          else key = 0;
      }
      else {    //低电平,按键按下
//          PRINT( "Key Pressed。\r\n");
          if(key) key |= 0x40;
          else key = 1;
      }

      DelayMs( 10 );

      if(key == 0x80) {
          PRINT( "Key Released。\r\n");
          duty += 4;
          if(duty > 64) duty = 0;
          PRINT( "Duty=%02d\n", duty );
          PWMX_ACTOUT( CH_PWM9, duty, Low_Level, ENABLE );  //亮度增加25%
          GPIOB_InverseBits(GPIO_Pin_6);    //LED1 翻转
          key = 0;
      }
  }
}

 

最新回复

nmg
“发现代码一开始就配置串口的话,会导致下载到芯片的时候(串口下载),很难成功,所以程序开始延迟了2秒,再设置串口。”   “按键的问题,经过多次折腾,终于找到了问题,就是GPIO的模式中不要设置浮空输入,一定要设置成上拉或者下拉。”   划重点 这2个是没读手册导致的使用问题还是芯片设计方面的与众不同?   详情 回复 发表于 2022-3-14 09:22
点赞 关注
 
 

回复
举报

5219

帖子

239

TA的资源

管理员

沙发
 

“发现代码一开始就配置串口的话,会导致下载到芯片的时候(串口下载),很难成功,所以程序开始延迟了2秒,再设置串口。”

 

“按键的问题,经过多次折腾,终于找到了问题,就是GPIO的模式中不要设置浮空输入,一定要设置成上拉或者下拉。”

 

划重点

这2个是没读手册导致的使用问题还是芯片设计方面的与众不同?

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

297

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

,说实话,多半应该是没读手册的问题吧。估计这个是大家的通病吧

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表