#申请原创# 3.新建工程
本帖介绍不使用例程,从头新建一个Keil工程的方法
新建一个文件夹用于存放工程文件和代码文件
打开文件夹,将驱动库文件放入这个目录,另外根据自己的习惯建立存放工程文件和用户代码的文件夹
打开Keil,选择project-new uVision Project
工程保存位置选择刚刚创建的文件夹
芯片型号选择Linko->LKS07 Series->LKS32MC071CBT8
在Manage Run-Time Environment窗口勾选CMSIS CORE,驱动库对这个组件有依赖,不勾选编译会报错
根据自己的习惯在工程下创建分组
添加驱动库文件
为了省事可以直接添加lks32mc07x_periph_driver\Source文件夹下的全部文件
添加头文件包含路径,将lks32mc07x_periph_driver\Include和UserCode包含进来
其它工程参数设置,按照例程的工程设置进行调整即可
如果你用的是新版本MDK,这里默认是用的AC6编译器,用这个编译库文件会报错需要改为AC5,MDK从5.37开始不再集成AC5编译器,如何在新版本MDK上使用AC5请自行百度
修改烧录器为自己使用的型号,建议勾选上Reset and Run,不然烧录后需要手动复位程序才能运行
创建main.c,并编写测试代码,这里写的是3个led流水灯的代码,需要注意的是LED3是低电平点亮,而LED1和LED2都是高电平点亮
#include "lks32mc07x.h"
#include "lks32mc07x_gpio.h"
#include "lks32mc07x_sys.h"
#define LED_GPIO GPIO0
#define LED1_PIN GPIO_Pin_6
#define LED2_PIN GPIO_Pin_7
#define LED3_PIN GPIO_Pin_3
#define LED_PINS LED1_PIN|LED2_PIN|LED3_PIN
static uint32_t SysClock;
void yuyy_delay_us(uint16_t us)
{
uint32_t temp;
SysTick->CTRL = 0x0; /*!< disable systick function */
SysTick->LOAD = us * (SysClock/1000000); /*!< time count for 1us with HSI as 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);
}
void SystemInit(void)
{
SYS_MclkChoice(SYS_MCLK_96M_RC); /*选择当前主时钟频率*/
}
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = LED_PINS;
GPIO_Init(LED_GPIO, &GPIO_InitStruct);
GPIO_ResetBits(LED_GPIO, LED1_PIN|LED2_PIN);
GPIO_SetBits(LED_GPIO, LED3_PIN);
}
void mcu_init(void)
{
__disable_irq(); /* 关闭中断 中断总开关 */
SYS_WR_PROTECT = 0x7a83; /*使能系统寄存器写操作*/
FLASH_CFG |= 0x00080000; /* enable prefetch ,FLASH预取加速使能*/
IWDG_DISABLE(); /*关闭清零看门狗*/
SYS_MclkChoice(SYS_MCLK_96M_RC); /*选择当前主时钟频率*/
SysClock = SYS_ReadMcuClk();
led_init();
yuyy_delay_us(100); /* 延时等待硬件初始化稳定 */
SYS_WR_PROTECT = 0x0; /*关闭系统寄存器写操作*/
__enable_irq(); /* 开启总中断 */
}
int main(void)
{
mcu_init();
while (1)
{
GPIO_SetBits(LED_GPIO, LED1_PIN);
GPIO_ResetBits(LED_GPIO, LED2_PIN);
GPIO_SetBits(LED_GPIO, LED3_PIN);
yuyy_delay_ms(200);
GPIO_ResetBits(LED_GPIO, LED1_PIN);
GPIO_SetBits(LED_GPIO, LED2_PIN);
GPIO_SetBits(LED_GPIO, LED3_PIN);
yuyy_delay_ms(200);
GPIO_ResetBits(LED_GPIO, LED1_PIN);
GPIO_ResetBits(LED_GPIO, LED2_PIN);
GPIO_ResetBits(LED_GPIO, LED3_PIN);
yuyy_delay_ms(200);
}
}
编译烧录,查看效果
|