[开发板与模块] 【ESK32-30519 + ESK32-21001测评】开发环境搭建+LED点灯

[复制链接]
 楼主| zhouminjie 发表于 2022-10-6 21:21 | 显示全部楼层 |阅读模式
<
本篇介绍合泰HT32F54253开发环境搭建及LED点灯测试
搭建前准备:HT32F54253相关资料下载地址:https://www.holtek.com.cn/esk32-30519
截图00.png
扩展板资料地址:https://www.holtek.com.cn/ESK32-21001
截图01.png
环境搭建,打开KEIL-MDK,点击Pack Installer
截图02.png
点击File,选择Import...,选择Holtek.HT32_DFP.latest.pack,(Holtek.HT32_DFP.latest.pack存放路径需是英文路径)
截图04.png
截图05.png
安装完成后,显示
截图06.png

新建工程
新建工程文件夹HT32F54253_LEDtest,工程文件夹中新建各子文件夹
截图07.png
点击Project--->New uVision Project…
选择进入HT32F54253_LEDtest中Mdk文件夹,输入project工程名,点击保存
截图08.png

选择芯片型号HT32F54253,点击OK
截图10.png

点击OK
截图11.png

点击File Extensions, Books and Environment…
截图12.png

在Manage Project Items中,新建Groups,并在其中添加相应的.c文件,点击OK
截图13.png

Project一栏中显示
截图14.png

点击Options for Target…
截图15.png

Output一栏勾选Create HEX File
截图16.png

C/C++--->IncludePaths中添加工程.h文件路径,Preprocessor Symbols添加USE_HT32_DRIVER, USE_HT32F54253_SK, USE_HT32F54243_53, USE_MEM_HT32F54253
截图17.png

截图18.png

Debug一栏选择仿真器仿真,仿真器选用CMSIS-DAP
截图19.png

硬件
PD1引脚连接LED1,PC14引脚连接LED2,PC14的复用功能为MT_CH3,马达控制定时器MCTM作PWM输出时,PC14可作为CH3输出

截图20.png

截图21.png

截图22.png
软件
PWM初始化,预分频HTCFG_MCTM_PRE设置为60,周期值HTCFG_MCTM_RELOAD 设置为400us
  1. void hal_pwmInit(void)
  2. {

  3.         TM_TimeBaseInitTypeDef MCTM_TimeBaseInitStructure;
  4.   TM_OutputInitTypeDef MCTM_OutputInitStructure;
  5. //  MCTM_CHBRKCTRInitTypeDef MCTM_CHBRKCTRInitStructure;

  6.   CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  7.   CKCUClock.Bit.AFIO = 1;
  8.         CKCUClock.Bit.PC = 1;
  9.         CKCUClock.Bit.PD = 1;
  10.   CKCUClock.Bit.MCTM0 = 1;
  11.   CKCU_PeripClockConfig(CKCUClock, ENABLE);

  12.   /* Configure MCTM Channel 0 output pin                                                                    */
  13. //  AFIO_GPxConfig(HTCFG_MCTM_CH0_GPIO_ID, HTCFG_MCTM_CH0_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  14. //  AFIO_GPxConfig(HTCFG_MCTM_CH0N_GPIO_ID, HTCFG_MCTM_CH0N_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  15.   /* Configure MCTM Channel 1 output pin                                                                    */
  16. //  AFIO_GPxConfig(HTCFG_MCTM_CH1_GPIO_ID, HTCFG_MCTM_CH1_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  17. //  AFIO_GPxConfig(HTCFG_MCTM_CH1N_GPIO_ID, HTCFG_MCTM_CH1N_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  18.   /* Configure MCTM Channel 2 output pin                                                                    */
  19. //  AFIO_GPxConfig(HTCFG_MCTM_CH2_GPIO_ID, HTCFG_MCTM_CH2_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  20. //  AFIO_GPxConfig(HTCFG_MCTM_CH2N_GPIO_ID, HTCFG_MCTM_CH2N_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  21.         /* Configure MCTM Channel 3 output pin */
  22.         AFIO_GPxConfig(HTCFG_MCTM_CH3_GPIO_ID, HTCFG_MCTM_CH3_AFIO_PIN, AFIO_FUN_MCTM_GPTM);
  23. //        GPIO_PullResistorConfig(LED2_PORT, LED2_PIN, GPIO_PR_DOWN);
  24. //        GPIO_DriveConfig(LED2_PORT, LED2_PIN, GPIO_DV_8MA);
  25. //        GPIO_WriteOutBits(LED2_PORT, LED2_PIN, RESET);
  26. //        GPIO_DirectionConfig(LED2_PORT, LED2_PIN, GPIO_DIR_OUT);
  27. //        GPIO_SetOutBits(LED2_PORT, LED2_PIN);

  28.   /* Configure MCTM Break pin                                                                               */
  29. //  AFIO_GPxConfig(HTCFG_MCTM_BREAK_GPIO_ID, HTCFG_MCTM_BREAK_AFIO_PIN, AFIO_FUN_MCTM_GPTM);

  30.   /* MCTM Time Base configuration                                                                           */
  31.   MCTM_TimeBaseInitStructure.CounterReload = HTCFG_MCTM_RELOAD - 1;
  32.   MCTM_TimeBaseInitStructure.Prescaler = HTCFG_MCTM_PRE - 1;        
  33.   MCTM_TimeBaseInitStructure.RepetitionCounter = 0;
  34.   MCTM_TimeBaseInitStructure.CounterMode = TM_CNT_MODE_UP;
  35.   MCTM_TimeBaseInitStructure.PSCReloadTime = TM_PSC_RLD_IMMEDIATE;
  36.   TM_TimeBaseInit(HT_MCTM0, &MCTM_TimeBaseInitStructure);

  37.   /* MCTM Channel 2 output configuration                                                              */
  38.   MCTM_OutputInitStructure.Channel = TM_CH_3;
  39.   MCTM_OutputInitStructure.OutputMode = TM_OM_PWM1;
  40.   MCTM_OutputInitStructure.Control = TM_CHCTL_ENABLE;
  41. //  MCTM_OutputInitStructure.ControlN = TM_CHCTL_DISABLE;
  42.   MCTM_OutputInitStructure.Polarity = TM_CHP_NONINVERTED;
  43. //  MCTM_OutputInitStructure.PolarityN = TM_CHP_NONINVERTED;
  44.   MCTM_OutputInitStructure.IdleState = MCTM_OIS_LOW;
  45. //  MCTM_OutputInitStructure.IdleStateN = MCTM_OIS_HIGH;
  46.   MCTM_OutputInitStructure.Compare = 0;
  47.   MCTM_OutputInitStructure.AsymmetricCompare = 0;
  48.   TM_OutputInit(HT_MCTM0, &MCTM_OutputInitStructure);

  49. //  MCTM_OutputInitStructure.Channel = TM_CH_1;
  50. //  MCTM_OutputInitStructure.Compare = HTCFG_MCTM_RELOAD * 1 / 2;
  51. //  TM_OutputInit(HT_MCTM0, &MCTM_OutputInitStructure);

  52. //  MCTM_OutputInitStructure.Channel = TM_CH_2;
  53. //  MCTM_OutputInitStructure.Compare = HTCFG_MCTM_RELOAD * 1 / 4;
  54. //  TM_OutputInit(HT_MCTM0, &MCTM_OutputInitStructure);

  55. //  /* MCTM Off State, lock, Break, Automatic Output enable, dead time configuration                          */
  56. //  MCTM_CHBRKCTRInitStructure.OSSRState = MCTM_OSSR_STATE_ENABLE;
  57. //  MCTM_CHBRKCTRInitStructure.OSSIState = MCTM_OSSI_STATE_ENABLE;
  58. //  MCTM_CHBRKCTRInitStructure.LockLevel = MCTM_LOCK_LEVEL_2;
  59. //  MCTM_CHBRKCTRInitStructure.Break0 = MCTM_BREAK_ENABLE;
  60. //  MCTM_CHBRKCTRInitStructure.Break0Polarity = MCTM_BREAK_POLARITY_LOW;
  61. //  MCTM_CHBRKCTRInitStructure.AutomaticOutput = MCTM_CHAOE_ENABLE;
  62. //  MCTM_CHBRKCTRInitStructure.DeadTime = HTCFG_MCTM_DEAD_TIME;
  63. //  MCTM_CHBRKCTRInitStructure.BreakFilter = 0;
  64. //  MCTM_CHBRKCTRConfig(HT_MCTM0, &MCTM_CHBRKCTRInitStructure);

  65.   /* MCTM counter enable                                                                                    */
  66.   TM_Cmd(HT_MCTM0, ENABLE);

  67.   /* MCTM Channel Main Output enable                                                                        */
  68.   MCTM_CHMOECmd(HT_MCTM0, ENABLE);

  69. }
呼吸灯效果
  1. void BreathingProc(void)
  2. {
  3.     static unsigned short dir, LEDPwmVal;

  4.     if(dir == 0) //由暗到亮
  5.         LEDPwmVal++;
  6.     else //由亮到暗
  7.         LEDPwmVal--;
  8.     if(LEDPwmVal > 399)
  9.         dir = 1;
  10.     if(LEDPwmVal == 0)
  11.         dir = 0;
  12.     TM_SetCaptureCompare(HT_MCTM0, TM_CH_3, LEDPwmVal);
  13. }
主函数
  1. int main(void)
  2. {
  3.                 hal_CPUInit();
  4.     hal_ledInit();
  5.                 hal_pwmInit();
  6.        
  7.     OS_TaskInit();
  8.     OS_TaskCreat(OS_TASK1, LedProc, 1, OS_SLEEP); //10ms调用一次
  9.                 OS_TaskCreat(OS_TASK2, BreathingProc, 1, OS_SLEEP); //10ms调用一次
  10.        
  11.     OS_Start();
  12. }
调试验证
LED1实现1秒亮灭,LED2实现呼吸灯
70aee3feb4268bf87ce715e18c130d34 (10).gif
测试代码
HT32F54253_LEDtest.rar (811.06 KB, 下载次数: 4)


LLGTR 发表于 2022-10-6 21:36 | 显示全部楼层
以前合泰好像不能用Keil开发,现在能用的真不错!
海滨消消 发表于 2022-10-10 14:56 来自手机 | 显示全部楼层
国产单片机真的越来越强悍了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

140

帖子

3

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

33

主题

140

帖子

3

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