打印
[开发板]

【CW32L031CxTx StartKit评估板测评】2.新建工程并点灯

[复制链接]
480|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创# @21小跑堂  

先创建一个文件夹,把官方库放进去,可以按照自己喜欢的方式创建额外的文件夹

打开MDK,选择project-new uVision Project

保存位置选择MDK文件夹

在接下来的窗口中选择CW32L031C8

在接下来的窗口中勾选这两个,注意core后面的版本,如果版本低于5.1.0之后编译时还会报错,如何解决请参考开箱那篇帖子最后的链接

按照自己喜好在工程内创建分组,添加必要的库文件

选择工程目录下的Libraries\src中的文件
你可以直接全部添加,也可以只添加自己需要的,这里只添加了点灯必要的

添加库头文件路径,将工程目录中的Libraries\inc和USERCODE文件夹添加到路径中MDK会自动转为相对路径

如果有自己定义的头文件需要包含,也可以按照上面的流程添加,如果想使用绝对路径直接在这个界面输入路径即可,路径间用英文的;分隔

接下来配置工程其它参数,仿照官方例程的参数配置即可
这里可以选择使用AC6,有一个库文件没有适配AC6,但是现在没用到它,如果之前添加库文件时直接添加了全部,这里选AC6编译时就会报错,如何解决请参考开箱那篇帖子最后的链接

如果需要输出hex文件,要勾选这个

这里要选C99

修改自己使用的烧录器

成功识别烧录器和芯片的话这里是这样的

勾选这个,不然程序烧录完后不会自动运行

接下来创建一个main.c文件,在新建的main.c中写好点灯用的代码,顺便写一个Cotex-M系列内核通用的延时方法
#include "cw32l031.h"
#include "cw32l031_gpio.h"
#include "cw32l031_rcc.h"
#include "system_cw32l031.h"

extern uint32_t SystemCoreClock;
void yuyy_delay_us(uint16_t us)
{
    uint32_t temp;
    SysTick->CTRL = 0x0;               /*!< disable systick function */
    SysTick->LOAD = us * (SystemCoreClock/1000000);         /*!< time count for 1us with SYSCLK */
    SysTick->VAL  = 0x00;              /*!< clear counter */
    SysTick->CTRL = 0x5;               /*!< start discrease with Polling */
    do
    {
        temp = SysTick->CTRL;
    }
    while ((temp & 0x01) && !(temp & (1 << 16))); /*!< wait time count done */
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;    /*!< Close Counter */
    SysTick->VAL   = 0X00;
}

void yuyy_delay_ms(uint16_t ms)
{
    while(ms--)
        yuyy_delay_us(1000);
}

int32_t main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __RCC_GPIOB_CLK_ENABLE();

    GPIO_InitStruct.IT = GPIO_IT_NONE;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pins = GPIO_PIN_8 | GPIO_PIN_9;

    GPIO_Init(CW_GPIOB, &GPIO_InitStruct);

    while (1)
    {
        GPIO_TogglePin(CW_GPIOB, GPIO_PIN_8);
        yuyy_delay_ms(500);
        GPIO_TogglePin(CW_GPIOB, GPIO_PIN_9);
        yuyy_delay_ms(500);
    }
}

#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
    /* USER CODE BEGIN 6 */
    /* User can add his own implementation to report the file name and line number,
       tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
       /* USER CODE END 6 */
}
#endif
编译发现了一个警告,&比==的运算优先级低,还是处理一下比较好,加个括号就行了


运行效果


使用特权

评论回复
评论
leslietian 2023-9-25 10:30 回复TA
赞一下 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

695

帖子

6

粉丝