This commit is contained in:
2025-06-18 09:08:17 +08:00
commit 7999439a8f
363 changed files with 313769 additions and 0 deletions

264
SYSTEM/delay/delay.c Normal file
View File

@ -0,0 +1,264 @@
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>OS,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>.
#if SYSTEM_SUPPORT_OS
#include "includes.h" //ucos ʹ<><CAB9>
#endif
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ʹ<><CAB9>SysTick<63><6B><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ӳٽ<D3B3><D9BD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺ<EFBFBD>STM32F10xϵ<78>У<EFBFBD>
//<2F><><EFBFBD><EFBFBD>delay_us,delay_ms
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2010/1/1
//<2F><EFBFBD><E6B1BE>V1.8
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2009-2019
//All rights reserved
//********************************************************************************
//V1.2<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
//<2F><>ֹ<EFBFBD><D6B9>ʱ<EFBFBD><CAB1>׼ȷ,<2C><><EFBFBD><EFBFBD>do while<6C>ṹ!
//V1.3<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>UCOSII<49><49>ʱ<EFBFBD><CAB1>֧<EFBFBD><D6A7>.
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ucosII,delay_init<69><74><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>SYSTICK<43><4B>ֵ,ʹ֮<CAB9><D6AE>ucos<6F><73>TICKS_PER_SEC<45><43>Ӧ.
//delay_ms<6D><73>delay_usҲ<73><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F>ĸ<EFBFBD><C4B8><EFBFBD>.
//delay_us<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F><73>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>׼ȷ<D7BC>Ⱥܸ<C8BA>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ռ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>.
//delay_ms<6D><73>ucos<6F><73>,<2C><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>OSTimeDly<6C><79><EFBFBD><EFBFBD>,<2C><>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ucosʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay_usʵ<73><CAB5>,<2C>Ӷ<EFBFBD>׼ȷ<D7BC><C8B7>ʱ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos֮<73><D6AE>delay_ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,ѡ<><D1A1>OSTimeDlyʵ<79>ֻ<EFBFBD><D6BB><EFBFBD>delay_usʵ<73><CAB5>.
//V1.4<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20110929
//<2F>޸<EFBFBD><DEB8><EFBFBD>ʹ<EFBFBD><CAB9>ucos,<2C><><EFBFBD><EFBFBD>ucosδ<73><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,delay_ms<6D><73><EFBFBD>ж<EFBFBD><D0B6>޷<EFBFBD><DEB7><EFBFBD>Ӧ<EFBFBD><D3A6>bug.
//V1.5<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20120902
//<2F><>delay_us<75><73><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD>delay_us<75><73>ִ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>µ<EFBFBD><C2B5><EFBFBD>ʱ<EFBFBD><CAB1>׼<EFBFBD><D7BC>
//V1.6<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20150109
//<2F><>delay_ms<6D><73><EFBFBD><EFBFBD>OSLockNesting<6E>жϡ<D0B6>
//V1.7<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20150319
//<2F>޸<EFBFBD>OS֧<53>ַ<EFBFBD>ʽ,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOSII<49><49>UCOSIII,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>)
//<2F><><EFBFBD><EFBFBD>:delay_osrunning/delay_ostickspersec/delay_osintnesting<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8>
//<2F><><EFBFBD><EFBFBD>:delay_osschedlock/delay_osschedunlock/delay_ostimedly<6C><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//V1.8<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20150519
//<2F><><EFBFBD><EFBFBD>UCOSIII֧<49><D6A7>ʱ<EFBFBD><CAB1>2<EFBFBD><32>bug<75><67>
//delay_tickspersec<65><63>Ϊ<EFBFBD><CEAA>delay_ostickspersec
//delay_intnesting<6E><67>Ϊ<EFBFBD><CEAA>delay_osintnesting
//////////////////////////////////////////////////////////////////////////////////
static u8 fac_us=0; //us<75><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u16 fac_ms=0; //ms<6D><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ucos<6F><73>,<2C><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ms<6D><73>
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD>SYSTEM_SUPPORT_OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CBB5>Ҫ֧<D2AA><D6A7>OS<4F><53>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOS).
//<2F><>delay_us/delay_ms<6D><73>Ҫ֧<D2AA><D6A7>OS<4F><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD>صĺ궨<C4BA><EAB6A8><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EAB6A8>:
// delay_osrunning:<3A><><EFBFBD>ڱ<EFBFBD>ʾOS<4F><53>ǰ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
//delay_ostickspersec:<3A><><EFBFBD>ڱ<EFBFBD>ʾOS<4F><EFBFBD><E8B6A8>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>,delay_init<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>systick
// delay_osintnesting:<3A><><EFBFBD>ڱ<EFBFBD>ʾOS<4F>ж<EFBFBD>Ƕ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD>,<2C><>Ϊ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><E6B2BB><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>,delay_msʹ<73>øò<C3B8><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Ȼ<><C8BB><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// delay_osschedlock:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//delay_osschedunlock:<3A><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// delay_ostimedly:<3A><><EFBFBD><EFBFBD>OS<4F><53>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD>UCOSII<49><49>UCOSIII<49><49>֧<EFBFBD><D6A7>,<2C><><EFBFBD><EFBFBD>OS,<2C><><EFBFBD><EFBFBD><EFBFBD>вο<D0B2><CEBF><EFBFBD><EFBFBD><EFBFBD>ֲ
//֧<><D6A7>UCOSII
#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CBB5>Ҫ֧<D2AA><D6A7>UCOSII
#define delay_osrunning OSRunning //OS<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>,0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define delay_ostickspersec OS_TICKS_PER_SEC //OSʱ<53>ӽ<EFBFBD><D3BD><EFBFBD>,<2C><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
#define delay_osintnesting OSIntNesting //<2F>ж<EFBFBD>Ƕ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD>,<2C><><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>״<EFBFBD><D7B4><EFBFBD>
#endif
//֧<><D6A7>UCOSIII
#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CBB5>Ҫ֧<D2AA><D6A7>UCOSIII
#define delay_osrunning OSRunning //OS<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>,0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define delay_ostickspersec OSCfg_TickRate_Hz //OSʱ<53>ӽ<EFBFBD><D3BD><EFBFBD>,<2C><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
#define delay_osintnesting OSIntNestingCtr //<2F>ж<EFBFBD>Ƕ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD>,<2C><><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>״<EFBFBD><D7B4><EFBFBD>
#endif
//us<75><73><EFBFBD><EFBFBD>ʱʱ,<2C>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73><EFBFBD>ӳ<EFBFBD>)
void delay_osschedlock(void)
{
#ifdef CPU_CFG_CRITICAL_METHOD //ʹ<><CAB9>UCOSIII
OS_ERR err;
OSSchedLock(&err); //UCOSIII<49>ķ<EFBFBD>ʽ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ
#else //<2F><><EFBFBD><EFBFBD>UCOSII
OSSchedLock(); //UCOSII<49>ķ<EFBFBD>ʽ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ
#endif
}
//us<75><73><EFBFBD><EFBFBD>ʱʱ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void delay_osschedunlock(void)
{
#ifdef CPU_CFG_CRITICAL_METHOD //ʹ<><CAB9>UCOSIII
OS_ERR err;
OSSchedUnlock(&err); //UCOSIII<49>ķ<EFBFBD>ʽ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
#else //<2F><><EFBFBD><EFBFBD>UCOSII
OSSchedUnlock(); //UCOSII<49>ķ<EFBFBD>ʽ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
#endif
}
//<2F><><EFBFBD><EFBFBD>OS<4F>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
//ticks:<3A><>ʱ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
void delay_ostimedly(u32 ticks)
{
#ifdef CPU_CFG_CRITICAL_METHOD
OS_ERR err;
OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII<49><49>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
#else
OSTimeDly(ticks); //UCOSII<49><49>ʱ
#endif
}
//systick<63>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ʹ<><CAB9>ucosʱ<73>õ<EFBFBD>
void SysTick_Handler(void)
{
if(delay_osrunning==1) //OS<4F><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ȴ<EFBFBD><C8B4><EFBFBD>
{
OSIntEnter(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
OSTimeTick(); //<2F><><EFBFBD><EFBFBD>ucos<6F><73>ʱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OSIntExit(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ж<EFBFBD>
}
}
#endif
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
//<2F><>ʹ<EFBFBD><CAB9>OS<4F><53>ʱ<EFBFBD><CAB1>,<2C>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OS<4F><53>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
//SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪHCLKʱ<4B>ӵ<EFBFBD>1/8
//SYSCLK:ϵͳʱ<CDB3><CAB1>
void delay_init()
{
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS.
u32 reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //ѡ<><D1A1><EFBFBD>ⲿʱ<E2B2BF><CAB1> HCLK/8
fac_us=SystemCoreClock/8000000; //Ϊϵͳʱ<CDB3>ӵ<EFBFBD>1/8
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS.
reload=SystemCoreClock/8000000; //ÿ<><C3BF><EFBFBD>ӵļ<D3B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪK
reload*=1000000/delay_ostickspersec; //<2F><><EFBFBD><EFBFBD>delay_ostickspersec<65><EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//reloadΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ:16777216,<2C><>72M<32><4D><><D4BC>1.86s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fac_ms=1000/delay_ostickspersec; //<2F><><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>λ
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //<2F><><EFBFBD><EFBFBD>SYSTICK<43>ж<EFBFBD>
SysTick->LOAD=reload; //ÿ1/delay_ostickspersec<65><63><EFBFBD>ж<EFBFBD>һ<EFBFBD><D2BB>
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //<2F><><EFBFBD><EFBFBD>SYSTICK
#else
fac_ms=(u16)fac_us*1000; //<2F><>OS<4F><53>,<2C><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ms<6D><73>Ҫ<EFBFBD><D2AA>systickʱ<6B><CAB1><EFBFBD><EFBFBD>
#endif
}
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS.
//<2F><>ʱnus
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
void delay_us(u32 nus)
{
u32 ticks;
u32 told,tnow,tcnt=0;
u32 reload=SysTick->LOAD; //LOAD<41><44>ֵ
ticks=nus*fac_us; //<2F><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
tcnt=0;
delay_osschedlock(); //<2F><>ֹOS<4F><53><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ
told=SysTick->VAL; //<2F>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow; //<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>һ<EFBFBD><D2BB>SYSTICK<43><4B>һ<EFBFBD><D2BB><EFBFBD>ݼ<EFBFBD><DDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD>.
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break; //ʱ<><EFBFBD><E4B3AC>/<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>˳<EFBFBD>.
}
};
delay_osschedunlock(); //<2F>ָ<EFBFBD>OS<4F><53><EFBFBD><EFBFBD>
}
//<2F><>ʱnms
//nms:Ҫ<><D2AA>ʱ<EFBFBD><CAB1>ms<6D><73>
void delay_ms(u16 nms)
{
if(delay_osrunning&&delay_osintnesting==0) //<2F><><EFBFBD><EFBFBD>OS<4F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>(<28>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><E6B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
{
if(nms>=fac_ms) //<2F><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
delay_ostimedly(nms/fac_ms); //OS<4F><53>ʱ
}
nms%=fac_ms; //OS<4F>Ѿ<EFBFBD><D1BE>޷<EFBFBD><DEB7><EFBFBD><E1B9A9>ôС<C3B4><D0A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD>ʱ
}
delay_us((u32)(nms*1000)); //<2F><>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD>ʱ
}
#else //<2F><><EFBFBD><EFBFBD>OSʱ
//<2F><>ʱnus
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL=0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD><EFBFBD><E4B5BD>
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL =0X00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><>ʱnms
//ע<><D7A2>nms<6D>ķ<EFBFBD>Χ
//SysTick->LOADΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK<4C><4B>λΪHz,nms<6D><73>λΪms
//<2F><>72M<32><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,nms<=1864
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(SysTick->LOADΪ24bit)
SysTick->VAL =0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD><EFBFBD><E4B5BD>
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL =0X00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
#endif

76
SYSTEM/delay/delay.h Normal file
View File

@ -0,0 +1,76 @@
#ifndef __DELAY_H
#define __DELAY_H
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ʹ<><CAB9>SysTick<63><6B><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ӳٽ<D3B3><D9BD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺ<EFBFBD>STM32F10xϵ<78>У<EFBFBD>
//<2F><><EFBFBD><EFBFBD>delay_us,delay_ms
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2010/1/1
//<2F><EFBFBD><E6B1BE>V1.8
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2009-2019
//All rights reserved
//********************************************************************************
//V1.2<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
//<2F><>ֹ<EFBFBD><D6B9>ʱ<EFBFBD><CAB1>׼ȷ,<2C><><EFBFBD><EFBFBD>do while<6C>ṹ!
//V1.3<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>UCOSII<49><49>ʱ<EFBFBD><CAB1>֧<EFBFBD><D6A7>.
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ucosII,delay_init<69><74><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>SYSTICK<43><4B>ֵ,ʹ֮<CAB9><D6AE>ucos<6F><73>TICKS_PER_SEC<45><43>Ӧ.
//delay_ms<6D><73>delay_usҲ<73><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F>ĸ<EFBFBD><C4B8><EFBFBD>.
//delay_us<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F><73>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>׼ȷ<D7BC>Ⱥܸ<C8BA>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ռ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>.
//delay_ms<6D><73>ucos<6F><73>,<2C><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>OSTimeDly<6C><79><EFBFBD><EFBFBD>,<2C><>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ucosʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay_usʵ<73><CAB5>,<2C>Ӷ<EFBFBD>׼ȷ<D7BC><C8B7>ʱ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos֮<73><D6AE>delay_ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,ѡ<><D1A1>OSTimeDlyʵ<79>ֻ<EFBFBD><D6BB><EFBFBD>delay_usʵ<73><CAB5>.
//V1.4<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20110929
//<2F>޸<EFBFBD><DEB8><EFBFBD>ʹ<EFBFBD><CAB9>ucos,<2C><><EFBFBD><EFBFBD>ucosδ<73><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,delay_ms<6D><73><EFBFBD>ж<EFBFBD><D0B6>޷<EFBFBD><DEB7><EFBFBD>Ӧ<EFBFBD><D3A6>bug.
//V1.5<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20120902
//<2F><>delay_us<75><73><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD>delay_us<75><73>ִ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>µ<EFBFBD><C2B5><EFBFBD>ʱ<EFBFBD><CAB1>׼<EFBFBD><D7BC>
//V1.6<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20150109
//<2F><>delay_ms<6D><73><EFBFBD><EFBFBD>OSLockNesting<6E>жϡ<D0B6>
//V1.7<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20150319
//<2F>޸<EFBFBD>OS֧<53>ַ<EFBFBD>ʽ,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOSII<49><49>UCOSIII,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>)
//<2F><><EFBFBD><EFBFBD>:delay_osrunning/delay_ostickspersec/delay_osintnesting<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8>
//<2F><><EFBFBD><EFBFBD>:delay_osschedlock/delay_osschedunlock/delay_ostimedly<6C><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//V1.8<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD> 20150519
//<2F><><EFBFBD><EFBFBD>UCOSIII֧<49><D6A7>ʱ<EFBFBD><CAB1>2<EFBFBD><32>bug<75><67>
//delay_tickspersec<65><63>Ϊ<EFBFBD><CEAA>delay_ostickspersec
//delay_intnesting<6E><67>Ϊ<EFBFBD><CEAA>delay_osintnesting
//////////////////////////////////////////////////////////////////////////////////
void delay_init(void);
void delay_ms(u16 nms);
void delay_us(u32 nus);
#endif

37
SYSTEM/sys/sys.c Normal file
View File

@ -0,0 +1,37 @@
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK Mini STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ϵͳ<CFB5>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:2012/9/10
//<2F><EFBFBD><E6B1BE>V1.4
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2009-2019
//All rights reserved
//********************************************************************************
//THUMBָ<42>֧<EEB2BB>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ʵ<EFBFBD><CAB5>ִ<EFBFBD>л<EFBFBD><D0BB><EFBFBD>ָ<EFBFBD><D6B8>WFI
void WFI_SET(void)
{
__ASM volatile("wfi");
}
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void INTX_DISABLE(void)
{
__ASM volatile("cpsid i");
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");
}
//<2F><><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ
//addr:ջ<><D5BB><EFBFBD><EFBFBD>ַ
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}

73
SYSTEM/sys/sys.h Normal file
View File

@ -0,0 +1,73 @@
#ifndef __SYS_H
#define __SYS_H
#include "stm32f10x.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:2012/8/18
//<2F><EFBFBD><E6B1BE>V1.7
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//0,<2C><>֧<EFBFBD><D6A7>ucos
//1,֧<><D6A7>ucos
#define SYSTEM_SUPPORT_OS 0 //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>UCOS
//λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB5>51<35><31><EFBFBD>Ƶ<EFBFBD>GPIO<49><4F><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>˼<EFBFBD><CBBC>,<2C>ο<EFBFBD><<CM3Ȩ<33><C8A8>ָ<EFBFBD><D6B8>>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(87ҳ~92ҳ).
//IO<49>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EAB6A8>
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO<49>ڵ<EFBFBD>ַӳ<D6B7><D3B3>
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
//IO<49>ڲ<EFBFBD><DAB2><EFBFBD><>Ե<EFBFBD>һ<EFBFBD><D2BB>IO<49><4F>!
//ȷ<><C8B7>n<EFBFBD><6E>ֵС<D6B5><D0A1>16!
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><E0BAAF>
void WFI_SET(void); //ִ<><D6B4>WFIָ<49><D6B8>
void INTX_DISABLE(void);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void INTX_ENABLE(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void MSR_MSP(u32 addr); //<2F><><EFBFBD>ö<EFBFBD>ջ<EFBFBD><D5BB>ַ
#endif

76
SYSTEM/thb6128/thb6128.c Normal file
View File

@ -0,0 +1,76 @@
#include "thb6128.h"
#include "usart.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "dac.h"
#include "led.h"
#include "motorstat.h"
/* EN-> PA11 M1 PB13
CW/CCW-> PA12 M2 PB14
CLK/cp-> PA8 M3 PB15
VREF-> PA4
FDT-> PA5
*/
extern int s1,s2;
void STEP_MOTOR_Init(void){ //接口初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_4; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //LED0-->PC13 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化
}
void STEP_MOTOR_FORWARD(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_12); //将PA12拉低正转
MotorStat.moveflag=1;
MotorStat.direction=0;
MotorStat.MoveMode=0;
s1=1;
}
void STEP_MOTOR_BACKWARD(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_12); //将PA12拉高反转
MotorStat.moveflag=1;
MotorStat.direction=1;
MotorStat.MoveMode=0;
s2=1;
}
void STEP_MOTOR_EN (void) //使能
{
GPIO_SetBits(GPIOA,GPIO_Pin_11);
Dac1_Set_Vol(1000);//保持电流
}
void STEP_MOTOR_OPEN (void)//开启电机
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
}
void STEP_MOTOR_OFF (void) //脱机
{
MotorStat.moveflag=0;
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
printf("ALREDAY_OFFLINE\r\n");
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, DISABLE);
}

26
SYSTEM/thb6128/thb6128.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef __STEP_MOTOR_H
#define __STEP_MOTOR_H
#include "sys.h"
#include "delay.h"
extern u8 STEP; //定义单步计数 全局变量
#define STEP_MOTOR_PORT GPIOG //定义IO接口所在组
#define STEP_MOTOR_A GPIO_Pin_2 //定义IO接口
#define STEP_MOTOR_B GPIO_Pin_3 //定义IO接口
#define STEP_MOTOR_C GPIO_Pin_4 //定义IO接口
#define STEP_MOTOR_D GPIO_Pin_5 //定义IO接口
#define STEP_MOTOR_CLK RCC_APB2Periph_GPIOG
void STEP_MOTOR_Init(void);//初始化
void STEP_MOTOR_OFF (void);//断电状态
void STEP_MOTOR_FORWARD(void);
void STEP_MOTOR_BACKWARD(void);
void STEP_MOTOR_OPEN (void);
void STEP_MOTOR_EN (void);
void switch_zheng (void);
void switch_fan (void);
#endif

150
SYSTEM/usart/usart.c Normal file
View File

@ -0,0 +1,150 @@
#include "sys.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//如果使用ucos,则包括下面的头文件即可.
#if SYSTEM_SUPPORT_OS
#include "includes.h" //ucos 使用
#endif
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif
/*使用microLib的方法*/
/*
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}
return ch;
}
int GetKey (void) {
while (!(USART1->SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
*/
#if EN_USART1_RX //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
char USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15 接收完成标志
//bit14 接收到0x0d
//bit13~0 接收到的有效字节数目
u16 USART_RX_STA=0; //接收状态标记
void uart_init(u32 bound){
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1GPIOA时钟
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
//USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART1, &USART_InitStructure); //初始化串口1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART_Cmd(USART1, ENABLE); //使能串口1
}
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) 判断读寄存器是否非空(RXNE)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //收的地方可能会遇到相同问题,同样需要清标志
Res =USART_ReceiveData(USART1); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
//发的地方清标志
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE);
USART_ReceiveData(USART1);
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真则需要支持OS.
OSIntExit();
#endif
}
#endif

38
SYSTEM/usart/usart.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////
//???????????????<3F><>????????????????????????<3F><>????
//ALIENTEK STM32??????
//????1?????
//???????@ALIENTEK
//???????:www.openedv.com
//???????:2012/8/18
//?<3F><>??V1.5
//??????<3F><>?????????
//Copyright(C) ?????????????????????? 2009-2019
//All rights reserved
//********************************************************************************
//V1.3??????
//???????????????????????????.
//???????printf?????
//??????????????????.
//??????printf?????????????bug
//V1.4??????
//1,??????????IO??bug
//2,?????USART_RX_STA,??????????????????2??14?<3F><>?
//3,??????USART_REC_LEN,??????<3F><>???????????????????(??????2??14?<3F><>?)
//4,?????EN_USART1_RX???????
//V1.5??????
//1,???????UCOSII?????
#define USART_REC_LEN 200 //??????????????? 200
#define EN_USART1_RX 1 //????1??/?????0??????1????
extern char USART_RX_BUF[USART_REC_LEN]; //???????,???USART_REC_LEN?????.????????<3F><>?
extern u16 USART_RX_STA; //?????????
//????????<3F><>??????????????????
void uart_init(u32 bound);
#endif