一.开发准备:
1.MM32-LINK安装;2.工程模板的建立;3.M3内核SysTick了解
二.MM32-LINK 安装:
官方驱动:
1.MM32-LINK仿真器/编程器USB驱动驱动程序,支持,Windows7,Windows XP。Windows 10及以上操作系统已预装USB驱动程序,MM32-LINK不再需要安装其它USB驱动程序。
驱动下载:链接:https://pan.baidu.com/s/1kPcPFYmWhkvCXGJBf8bkKA 提取码:1234
2.MM32-LINK仿真器驱动安装。
驱动下载:链接:https://pan.baidu.com/s/1ld2ib2GwbfJ7ooHZsk9M-Q 提取码:1234
先安装usb驱动,再安装MM32-LINK驱动
三.工程模板的建立
参考官方SDK,建立自己的模板。模板下载:
链接:https://pan.baidu.com/s/1KIWtgfCoUA3HpiVSZqVNGg
提取码:1234
提取码:1234
四.M3内核SysTick了解
Cortex‐M3处理器内部包含了一个简单的定时器。因此所有的CM3芯片都带有这个定时 器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK, CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。
通过用户手册可知,MM32F3270SysTick时钟来源AHB/8,AHB最大时钟频率为120MHZ;
MM32F3270内部系统时钟树如下:
五.代码实现
1.delay.c
#include "delay.h"//.h头文件声明
static uint8_t fac_us;//定义静态us变量
static uint16_t fac_ms;//定义静态ms变量,注意变量类型
void delay_init(void)//SysTick初始化
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//SysTick时钟来源,为AHB8分频,120/8
fac_us=120000000/8000000;//表示每us需要多少个SysTick时钟周期
fac_ms=(uint16_t)fac_us*1000; //表示每ms需要多少个SysTick时钟周期
}
void delay_us(uint32_t nus)//uint32_t nus,表示延时多少
{
uint32_t temp;
SysTick->LOAD=nus*fac_us;//设置us重装值
SysTick->VAL=0x00;//初始当前数值寄存器位0
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;//使能SysTick 定时器
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&!(temp&(1<<16)));//等待计数时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;/关闭使能<
SysTick->VAL=0x00;//重置当前值寄存器
}
void delay_ms(uint16_t nms)//uint16_t nus,表示延时多少msSysTick->LOAD=nms*fac_ms;//设置ms重装值 SysTick->VAL=0x00;//初始当前数值寄存器位0 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;//使能SysTick 定时器 do { temp=SysTick->CTRL; } while((temp&0x01)&&!(temp&(1<<16)));//等待计数时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//关闭使能 SysTick->VAL=0x00;//重置当前值寄存器 }
复制代码2.delay.h
#ifndef _DELAY_H#define _DELAY_H #include "mm32_device.h"//MM32头文件 #include "hal_conf.h"//库函数初始化 void delay_init(void); void delay_ms(uint16_t nms);//函数声明 void delay_init(void); #endif
复制代码3.main.c
#include "main.h"#include "gpio.h" #include "delay.h" int main(void) { gpio_init(); delay_init(); while(1) { GPIO_ResetBits(GPIOA,GPIO_Pin_15); GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); delay_ms(500); GPIO_SetBits(GPIOA,GPIO_Pin_15); GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); delay_ms(500); }
复制代码七.MM32SysTick定时器视频演示
视频