打印
[AIROC™ 蓝牙]

英飞凌CYW20829测评】开发环境建立&基础任务

[复制链接]
471|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 一路向北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:
#include <stdio.h>
#include "bsp_uart.h"
void verHandler(void);
void chipHandler(void);
cmdTab_t cmdList[]=
{
    {"ver",verHandler},
    {"chip",chipHandler}
};
int cmdNum=sizeof(cmdList)/sizeof(cmdTab_t);
void verHandler()
{
    printf("%s%s\n",__DATE__,__TIME__);
}
void chipHandler()
{
    printf("Hello Infineon CYW20829!\n");
}




使用特权

评论回复
5
一路向北lm|  楼主 | 2024-7-14 23:53 | 只看该作者
bsp_uart.h 内容:
#ifndef   __BSP_UART_H__
#define   __BSP_UART_H__
typedef void (*pCmd)(void);
typedef struct
{
    char *cmdName;
    pCmd cmdHandler;
}cmdTab_t;
extern cmdTab_tcmdList[];
extern int cmdNum;
#endif


使用特权

评论回复
6
一路向北lm|  楼主 | 2024-7-14 23:53 | 只看该作者
添加shell指令方法:
#include "bsp_uart.h"
#include <string.h>

#defineBUFF_SIZE                  (64)
char txBuff[BUFF_SIZE];
char rxBuff[BUFF_SIZE];
volatile bool rxEnd = 0;
volatile int txBuffIndex= 0;
volatile int rxBuffIndex= 0;


使用特权

评论回复
7
一路向北lm|  楼主 | 2024-7-14 23:54 | 只看该作者
打开串口调试软件,选择对应COM口可以看到Hello Infineon CYW20829!

使用特权

评论回复
8
一路向北lm|  楼主 | 2024-7-21 17:11 | 只看该作者
基础任务2:PWM呼吸灯
这款开发板上两个用户LED,电路原理图如下:

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

通过 Configurators 进行外设配置

时钟配置:

生成代码如下:
const cy_stc_tcpwm_pwm_config_t tcpwm_0_group_1_cnt_5_config =
{
    .pwmMode = CY_TCPWM_PWM_MODE_PWM,
    .clockPrescaler = CY_TCPWM_PWM_PRESCALER_DIVBY_1,
    .pwmAlignment = CY_TCPWM_PWM_LEFT_ALIGN,
    .deadTimeClocks = 0,
    .runMode = CY_TCPWM_PWM_CONTINUOUS,
    .period0 = 32768,
    .period1 = 32768,
    .enablePeriodSwap = false,
    .compare0 = 16384,
    .compare1 = 16384,
    .enableCompareSwap = false,
    .interruptSources = (CY_TCPWM_INT_ON_TC & 0U) | (CY_TCPWM_INT_ON_CC0 & 0U) | (CY_TCPWM_INT_ON_CC1 & 0U),
    .invertPWMOut = CY_TCPWM_PWM_INVERT_DISABLE,
    .invertPWMOutN = CY_TCPWM_PWM_INVERT_DISABLE,
    .killMode = CY_TCPWM_PWM_STOP_ON_KILL,
    .swapInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
    .swapInput = CY_TCPWM_INPUT_0,
    .reloadInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
    .reloadInput = CY_TCPWM_INPUT_0,
    .startInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
    .startInput = CY_TCPWM_INPUT_0,
    .killInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
    .killInput = CY_TCPWM_INPUT_0,
    .countInputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
    .countInput = CY_TCPWM_INPUT_1,
    .swapOverflowUnderflow = false,
    .immediateKill = false,
    .tapsEnabled = 45,
    .compare2 = 16384,
    .compare3 = 16384,
    .enableCompare1Swap = false,
    .compare0MatchUp = true,
    .compare0MatchDown = false,
    .compare1MatchUp = true,
    .compare1MatchDown = false,
    .kill1InputMode = tcpwm_0_group_1_cnt_5_INPUT_DISABLED & 0x3U,
    .kill1Input = CY_TCPWM_INPUT_0,
    .pwmOnDisable = CY_TCPWM_PWM_OUTPUT_HIGHZ,
    .trigger0Event = CY_TCPWM_CNT_TRIGGER_ON_DISABLED,
    .trigger1Event = CY_TCPWM_CNT_TRIGGER_ON_DISABLED,
    .reloadLineSelect = false,
    .line_out_sel = CY_TCPWM_OUTPUT_PWM_SIGNAL,
    .linecompl_out_sel = CY_TCPWM_OUTPUT_INVERTED_PWM_SIGNAL,
    .line_out_sel_buff = CY_TCPWM_OUTPUT_PWM_SIGNAL,
    .linecompl_out_sel_buff = CY_TCPWM_OUTPUT_INVERTED_PWM_SIGNAL,
    .deadTimeClocks_linecompl_out = 0,
#if defined (CY_IP_MXS40TCPWM)
    .hrpwm_enable = false,
    .hrpwm_input_freq = CY_TCPWM_HRPWM_FREQ_80MHZ_OR_100MHZ,
    .kill_line_polarity = CY_TCPWM_LINEOUT_AND_LINECMPOUT_IS_LOW,
    .deadTimeClocksBuff = 0,
    .deadTimeClocksBuff_linecompl_out = 0,
    .buffer_swap_enable = false,
    .glitch_filter_enable = false,
    .gf_depth = CY_GLITCH_FILTER_DEPTH_SUPPORT_VALUE_0,
    .dithering_mode = CY_TCPWM_DITHERING_DISABLE,
    .period_dithering_value = 128,
    .duty_dithering_value = 128,
    .limiter = CY_TCPWM_DITHERING_LIMITER_7,
#endif /* defined (CY_IP_MXS40TCPWM) */
};
定时器设定为1ms一次中断
void timer_init(void)
{
    cy_rslt_t result;

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

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

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

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

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

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

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

    /* Start the timer with the configured settings */
    cyhal_timer_start(&led_blink_timer);
}
pwm初始化函数:
static void isr_timer(void* callback_arg, cyhal_timer_event_t event)
{
    (void)callback_arg;
    (void)event;

    if(timer_count > 0)
        timer_count -= 1;
    if(timer_count == 0)
    {
        timer_count = 2000;
        cyhal_gpio_toggle(CYBSP_USER_LED1);
    }
    if(timer_count < 1000)
    {
            cyhal_pwm_set_duty_cycle(&pwm_led2_control,timer_count/10.0,10000);
    }
    else {
            cyhal_pwm_set_duty_cycle(&pwm_led2_control, (2000-timer_count)/10.0,10000);
    }
}
最终效果如下:

使用特权

评论回复
9
suncat0504| | 2024-7-29 21:15 | 只看该作者
很细,可以作为借鉴的资料学习了。

使用特权

评论回复
10
shenxiaolin| | 2024-7-29 21:50 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

275

主题

3784

帖子

76

粉丝