本帖最后由 郑工王同学 于 2021-10-26 22:06 编辑

一.开发准备:
  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驱动
121859eg9pvevt59576pvf.png

三.工程模板的建立
  参考官方SDK,建立自己的模板。模板下载:
  链接:https://pan.baidu.com/s/1KIWtgfCoUA3HpiVSZqVNGg
  提取码:1234
四.M3内核SysTick了解
      Cortex‐M3处理器内部包含了一个简单的定时器。因此所有的CM3芯片都带有这个定时 器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK, CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。
   通过用户手册可知,MM32F3270SysTick时钟来源AHB/8,AHB最大时钟频率为120MHZ;
    MM32F3270内部系统时钟树如下:
  



123114mj00dj4idad4m1i1.png

    SysTick内部寄存器了解:

  
123847huoefucp17cvv72v.png
五.代码实现
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,表示延时多少ms
  • SysTick->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定时器视频演示
    视频