Cortex®-M0 处理器是一个可配置,具有多级流水线的 32 位 RISC 处理器。它拥有一个 AMBA AHB-Lite 接口并包含 NVIC 组件,同时有可选的硬件调试功能。该处理器可以执行 Thumb 指令,并与其他 Cortex®-M 系列处理器兼容。该处理器支持两种工作模式——Thread 模式和 Handler 模式。 异常时系统进入 Handler 模式, 异常返回只能在 Handler
模式下执行。系统复位及异常返回后均可进入 Thread 模式。
1.2 特性
◆ 低门数处理器:
- ARMv6-M Thumb®指令集。
- Thumb-2 技术。
- ARMv6-M 兼容 24 位系统定时器。
- 一个 32 位硬件乘法器。
- 系统接口支持小端数据访问。
- 准确而及时的中断处理能力。
- 加载/存储多个数据和多周期乘法指令可被终止,然后重新开始,从而实现快速中断处理。
- C 应用程序二进制接口的异常兼容模式。
- ARMv6-M 的 C 应用程序二进制接口(C-ABI)异常兼容模式允许用户使用纯 C 函数实现中断处理。
◆ NVIC:
- 32 个外部中断,每个中断有 4 级优先级。
- 专用的不可屏蔽中断(NMI)。
- 同时支持电平和脉冲触发中断。
- 支持中断唤醒控制器(WIC),提供极低功耗空闲模式。
◆ 调试支持:
- 四个硬件断点。
- 两个观察点。
- 用于非侵入式代码分析的程序计数采样寄存器(PCSR)。
- 单步和向量捕捉能力。
◆ 总线接口:
- 为所有的系统接口及存储器提供简单集成的单一的 32 位 AMBA-3 AHB-Lite 系统接口。
- 支持 DAP(调试使用端口)单一的 32 位从机端口。
主控ARM Cortex M0内核,主频最高64MHz,工作电压:2.1V-5.5V,工作温度:-40℃ - 105℃,32KB Flash,8KB SRAM,1KB Data Flash、
DEMO程序运行:需要注意是JLINK烧录需要版本9.0以上才可以
核心代码
- void MC_Control(void)
- {
- switch(SYSTEM_STATE)
- {
- /* 系统初始化 */
- case SYS_INIT:
- {
- Mot_Parameter_Init();
- BasePara_Init();
- SYSTEM_STATE = SYS_RUN;
- break;
- }
- /* 系统正常工作状态 */
- case SYS_RUN:
- {
- /* 系统处于界面调试模式 */
- #if (Config_Comm_Mode == Comm_UI)
- {
- if(Flag.MC_RunStop == 0) {BasePara_Init();}
- if(Fault_OverVoltage || Fault_UnderVoltage) {u_Motor_Off();}
- }
- #else
- /* 电机运行以及调速控制 */
- if(Time.Motor_Restart == 0)
- {
- /* 故障刹车保护重启 */
- if(Fault_ShortCircuit)
- {
- Fault_ShortCircuit=0;
- EPWM_ResetFaultBrake();
- }
- /* 电压保护关机 */
- if(Fault_OverVoltage || Fault_UnderVoltage)
- {
- u_Motor_Off();
- }else if(Fault_Block){
- Fault_Block=0;
- u_Motor_On();
- }
- else
- {
- /*用户控制代码:由客户按照实际应用自行处理,包括以下几点 */
- /* 1、电机运行使能:u_Motor_On(); */
- /* 2、电机停止:u_Motor_Off(); */
- /* 3、调速信号给定:u_Motor_Speed_Set(Basic.VCtr); */
- #if (0)
- if(Basic.VCtr < VCTRL_REF_L)
- {
- u_Motor_Off();
- }
- else if(Basic.VCtr > VCTRL_REF_H)
- {
- u_Motor_Speed_Set((Basic.VCtr>>2));
- u_Motor_On();
- }
- #endif
- }
- }
- #endif
- break;
- }
- /* 电机重启 */
- case SYS_RESTART:
- {
- u_Motor_Off();
- /* 重启间隔时间 */
- Time.Motor_Restart = Motor_Restart_InvalTime*1000;
- /* 故障次数超过限定次数不再重启 */
- if(++Count.Motor_Restart >= Motor_Restart_Times)
- {
- Count.Motor_Restart = Motor_Restart_Times;
- SYSTEM_STATE = SYS_WAIT;
- }
- SYSTEM_STATE = SYS_RUN;
- MOTOR_STATE = MC_INIT;
- break;
- }
- /* 异常停机 */
- case SYS_FAULT:
- {
- System_Modules_off();
- break;
- }
- /* 等待上电重启 */
- case SYS_WAIT:
- {
- System_Modules_off();
- Clear_Fault_Message();
- Count.Motor_Restart = 0;
- SYSTEM_STATE = SYS_RUN;
- break;
- }
- default:
- break;
- }
- }
接入电机测试OK!