[AIROC™ 蓝牙] 英飞凌CYW20829测评】开发环境建立&基础任务

[复制链接]
 楼主| 一路向北lm 发表于 2024-6-30 22:02 | 显示全部楼层 |阅读模式
<
本帖最后由 一路向北lm 于 2024-7-14 15:46 编辑

开发环境搭建,收到了英飞凌的CYW20829蓝牙开发板,此贴记录开发日志
第一步:下载IDE,需要英飞凌账号,没有的需要注册一下,一个邮箱即可,
ModusToolbox   IDE 下载地址:
https://softwaretools.infineon.com/tools/com.ifx.tb.tool.modustoolboxsetup?_ga=2.13658686.844630970.1720933639-884432885.1718975865


第二步:无脑安装,本人默认路径,快速安装,此步骤略过.....


第三步:运行ModusToolBox,第一次需要安装Base Packages 和Additional Packages

如下安装即可,记得要登录账号

点击start ....

等待安装吧,几个小时后...

安装完成了....










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 一路向北lm 发表于 2024-7-14 17:45 | 显示全部楼层
本人没有梯子,只能使用离线包开发了,下载地址:https://softwaretools.infineon.com/tools/com.ifx.tb.tool.modustoolboxofflinecontentpackage




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 一路向北lm 发表于 2024-7-14 23:37 | 显示全部楼层
本帖最后由 一路向北lm 于 2024-7-21 17:14 编辑

基础任务:串口收发创建串口打印工程,如下图所示





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 一路向北lm 发表于 2024-7-14 23:52 | 显示全部楼层
在UART_Transmit_and_Receive demo基础上进行修改,新建bsp_uart.h:
  1. #include <stdio.h>
  2. #include "bsp_uart.h"
  3. void verHandler(void);
  4. void chipHandler(void);
  5. cmdTab_t cmdList[]=
  6. {
  7.     {"ver",verHandler},
  8.     {"chip",chipHandler}
  9. };
  10. int cmdNum=sizeof(cmdList)/sizeof(cmdTab_t);
  11. void verHandler()
  12. {
  13.     printf("%s%s\n",__DATE__,__TIME__);
  14. }
  15. void chipHandler()
  16. {
  17.     printf("Hello Infineon CYW20829!\n");
  18. }




 楼主| 一路向北lm 发表于 2024-7-14 23:53 | 显示全部楼层
bsp_uart.h 内容:
  1. #ifndef   __BSP_UART_H__
  2. #define   __BSP_UART_H__
  3. typedef void (*pCmd)(void);
  4. typedef struct
  5. {
  6.     char *cmdName;
  7.     pCmd cmdHandler;
  8. }cmdTab_t;
  9. extern cmdTab_tcmdList[];
  10. extern int cmdNum;
  11. #endif


 楼主| 一路向北lm 发表于 2024-7-14 23:53 | 显示全部楼层
添加shell指令方法:
  1. #include "bsp_uart.h"
  2. #include <string.h>

  3. #defineBUFF_SIZE                  (64)
  4. char txBuff[BUFF_SIZE];
  5. char rxBuff[BUFF_SIZE];
  6. volatile bool rxEnd = 0;
  7. volatile int txBuffIndex= 0;
  8. volatile int rxBuffIndex= 0;


 楼主| 一路向北lm 发表于 2024-7-14 23:54 | 显示全部楼层
打开串口调试软件,选择对应COM口可以看到Hello Infineon CYW20829!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 一路向北lm 发表于 2024-7-21 17:11 | 显示全部楼层
基础任务2:PWM呼吸灯
这款开发板上两个用户LED,电路原理图如下:

本次评测使用PWM连接到LED2,通过定时器驱动LED1,周期1s,实现呼吸灯效果;

通过 Configurators 进行外设配置

时钟配置:

生成代码如下:
  1. const cy_stc_tcpwm_pwm_config_t tcpwm_0_group_1_cnt_5_config =
  2. {
  3.     .pwmMode = CY_TCPWM_PWM_MODE_PWM,
  4.     .clockPrescaler = CY_TCPWM_PWM_PRESCALER_DIVBY_1,
  5.     .pwmAlignment = CY_TCPWM_PWM_LEFT_ALIGN,
  6.     .deadTimeClocks = 0,
  7.     .runMode = CY_TCPWM_PWM_CONTINUOUS,
  8.     .period0 = 32768,
  9.     .period1 = 32768,
  10.     .enablePeriodSwap = false,
  11.     .compare0 = 16384,
  12.     .compare1 = 16384,
  13.     .enableCompareSwap = false,
  14.     .interruptSources = (CY_TCPWM_INT_ON_TC & 0U) | (CY_TCPWM_INT_ON_CC0 & 0U) | (CY_TCPWM_INT_ON_CC1 & 0U),
  15.     .invertPWMOut = CY_TCPWM_PWM_INVERT_DISABLE,
  16.     .invertPWMOutN = CY_TCPWM_PWM_INVERT_DISABLE,
  17.     .killMode = CY_TCPWM_PWM_STOP_ON_KILL,
  18.     .swapInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
  19.     .swapInput = CY_TCPWM_INPUT_0,
  20.     .reloadInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
  21.     .reloadInput = CY_TCPWM_INPUT_0,
  22.     .startInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
  23.     .startInput = CY_TCPWM_INPUT_0,
  24.     .killInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
  25.     .killInput = CY_TCPWM_INPUT_0,
  26.     .countInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
  27.     .countInput = CY_TCPWM_INPUT_1,
  28.     .swapOverflowUnderflow = false,
  29.     .immediateKill = false,
  30.     .tapsEnabled = 45,
  31.     .compare2 = 16384,
  32.     .compare3 = 16384,
  33.     .enableCompare1Swap = false,
  34.     .compare0MatchUp = true,
  35.     .compare0MatchDown = false,
  36.     .compare1MatchUp = true,
  37.     .compare1MatchDown = false,
  38.     .kill1InputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
  39.     .kill1Input = CY_TCPWM_INPUT_0,
  40.     .pwmOnDisable = CY_TCPWM_PWM_OUTPUT_HIGHZ,
  41.     .trigger0Event = CY_TCPWM_CNT_TRIGGER_ON_DISABLED,
  42.     .trigger1Event = CY_TCPWM_CNT_TRIGGER_ON_DISABLED,
  43.     .reloadLineSelect = false,
  44.     .line_out_sel = CY_TCPWM_OUTPUT_PWM_SIGNAL,
  45.     .linecompl_out_sel = CY_TCPWM_OUTPUT_INVERTED_PWM_SIGNAL,
  46.     .line_out_sel_buff = CY_TCPWM_OUTPUT_PWM_SIGNAL,
  47.     .linecompl_out_sel_buff = CY_TCPWM_OUTPUT_INVERTED_PWM_SIGNAL,
  48.     .deadTimeClocks_linecompl_out = 0,
  49. #if defined (CY_IP_MXS40TCPWM)
  50.     .hrpwm_enable = false,
  51.     .hrpwm_input_freq = CY_TCPWM_HRPWM_FREQ_80MHZ_OR_100MHZ,
  52.     .kill_line_polarity = CY_TCPWM_LINEOUT_AND_LINECMPOUT_IS_LOW,
  53.     .deadTimeClocksBuff = 0,
  54.     .deadTimeClocksBuff_linecompl_out = 0,
  55.     .buffer_swap_enable = false,
  56.     .glitch_filter_enable = false,
  57.     .gf_depth = CY_GLITCH_FILTER_DEPTH_SUPPORT_VALUE_0,
  58.     .dithering_mode = CY_TCPWM_DITHERING_DISABLE,
  59.     .period_dithering_value = 128,
  60.     .duty_dithering_value = 128,
  61.     .limiter = CY_TCPWM_DITHERING_LIMITER_7,
  62. #endif /* defined (CY_IP_MXS40TCPWM) */
  63. };
定时器设定为1ms一次中断
  1. void timer_init(void)
  2. {
  3.     cy_rslt_t result;

  4.     const cyhal_timer_cfg_t led_blink_timer_cfg =
  5.     {
  6.         .compare_value = 0,                 /* Timer compare value, not used */
  7.         .period = LED_BLINK_TIMER_PERIOD,   /* Defines the timer period */
  8.         .direction = CYHAL_TIMER_DIR_UP,    /* Timer counts up */
  9.         .is_compare = false,                /* Don't use compare mode */
  10.         .is_continuous = true,              /* Run timer indefinitely */
  11.         .value = 0                          /* Initial value of counter */
  12.     };

  13.     /* Initialize the timer object. Does not use input pin ('pin' is NC) and
  14.      * does not use a pre-configured clock source ('clk' is NULL). */
  15.     result = cyhal_timer_init(&led_blink_timer, NC, NULL);

  16.     /* timer init failed. Stop program execution */
  17.     if (result != CY_RSLT_SUCCESS)
  18.     {
  19.         CY_ASSERT(0);
  20.     }

  21.     /* Configure timer period and operation mode such as count direction,
  22.        duration */
  23.     cyhal_timer_configure(&led_blink_timer, &led_blink_timer_cfg);

  24.     /* Set the frequency of timer's clock source */
  25.     cyhal_timer_set_frequency(&led_blink_timer, LED_BLINK_TIMER_CLOCK_HZ);

  26.     /* Assign the ISR to execute on timer interrupt */
  27.     cyhal_timer_register_callback(&led_blink_timer, isr_timer, NULL);

  28.     /* Set the event on which timer interrupt occurs and enable it */
  29.     cyhal_timer_enable_event(&led_blink_timer, CYHAL_TIMER_IRQ_TERMINAL_COUNT,
  30.                               7, true);

  31.     /* Start the timer with the configured settings */
  32.     cyhal_timer_start(&led_blink_timer);
  33. }
pwm初始化函数:
  1. static void isr_timer(void* callback_arg, cyhal_timer_event_t event)
  2. {
  3.     (void)callback_arg;
  4.     (void)event;

  5.     if(timer_count > 0)
  6.         timer_count -= 1;
  7.     if(timer_count == 0)
  8.     {
  9.         timer_count = 2000;
  10.         cyhal_gpio_toggle(CYBSP_USER_LED1);
  11.     }
  12.     if(timer_count < 1000)
  13.     {
  14.             cyhal_pwm_set_duty_cycle(&pwm_led2_control,timer_count/10.0,10000);
  15.     }
  16.     else {
  17.             cyhal_pwm_set_duty_cycle(&pwm_led2_control, (2000-timer_count)/10.0,10000);
  18.     }
  19. }
最终效果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
suncat0504 发表于 2024-7-29 21:15 | 显示全部楼层
很细,可以作为借鉴的资料学习了。
shenxiaolin 发表于 2024-7-29 21:50 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

293

主题

3837

帖子

81

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

293

主题

3837

帖子

81

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