Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

SwiperWitty/Core-Caven32

Repository files navigation

Core-Caven32

​ 因为本怪精力有限,[Cavendish 3.0]已经停止维护,除非出现重大BUG,现在推出了新硬件Caven 3.14 !Core-Caven32就是为其设计的全新代码框架。

​ Caven 3.14 板载硬件DAP-Link和TTL串口(可以Debug和串口3打印数据),此外还有一个LCD屏。

​ 只需要一根Type-c数据线和一台电脑即可开发 Caven 3.14 !

logo


​ 其实Core-Caven32里面放的是一个32位系统的代码库,包括ARM-M0、ARM-M0+、ARM-M3、ARM-M4(F)、RISC-V(虽然它的初衷是为Cavend 3.14服务)。

本设计仅供于学习、参考,不可商用和水毕业论文(参与开发者随意)!

更新日志

2020.开始创建

2021.框架稳定

2022.驱动

2024.开始收尾,CavenRTOS

更新速度Top Base底层完成度(独立) Mode调度层完成度(共享)
AT32F415 98% 95%
AT32F403A 40% -
STM32F103 90% -
GD32F405 -- -
CH32V203 90% -
HC32L110 99.8% 不在Caven框架(内存太小)
Other -- --

首先,要先确认Caven 3.14上面的CH549芯片是否有固件/驱动。

image-20240402173154416

如果没用,请到Core-Caven32\DAP-Link文件夹下面查看使用说明!如果电脑检测不到驱动,请去WCH官网寻求帮助,谢谢!嘉立创EDA dap-link硬件资料


开始使用

驱动&资料

MCU的Keil依赖&工具&资料 (因为这个东西不经常变更就不放在这里了)

子模块链接 (里面有食用方法)

Cavendish硬件资料 嘉立创EDA 或者 SwiperWitty/PCB-MCU ,注意是Caven 3.14哦!

关于有些小白直接下载压缩包

如果你直接下载,它里面会缺少[Caven-MCU_Lib]文件的内容,因为[Caven-MCU_Lib]文件是子模块。解决办法是git 下载这个子模块手动copy到[Core-Caven32]文件夹,但是这样极其愚蠢,我是不推荐的,而且没法获取代码更新。

image-20240120151722408

关于git 下载此项目

​ 因为这个工程里面有子模块(就是上面那个子模块链接,以防呆瓜不看,再说一遍),所以使用之前要从\Core-Caven32文件cd\Caven-MCU_Lib

git clone --recursive https://github.com/SwiperWitty/Core-Caven32.git
cd .\Caven-MCU_Lib\
git branch				// 查看分支
git checkout main		// 切换到主分支
cd ..
// ok了

如果你发现[Caven-MCU_Lib]文件夹是空的,那么你就需要执行下面的命令

//在Core-Caven32文件夹下的命令行
cd .\Caven-MCU_Lib\
git submodule update --init --recursive
// 如果没反应
git pull
// 如果还是没反应,那就应该去看git子模块使用方法
// 如果成功了,接下来执行切换到主分支
git branch
git checkout main
cd ..

其他疑问:

如果port 443 after : Timed out,你可以试试

设置网络代理,系统代理的 IP 地址和端口号。

git config --global http.proxy http://127.0.0.1:7890 

或者,取消网络代理(例如使用gitee)

git config --global --unset http.proxy

image-20230802141749444


主要功能

自动告诉你有哪些功能以及如何使用(Keil也会)!

所有会自动提升的功能都是已经写好的!

image-20240402181002084

CavenRTOS

这个功能是最重要的东西,当然你可能主观上不想用,但是实际上你在启动的时候,他就运行了。

  • 系统实时时钟管理
  • 多任务(状态机&触发器)
实时时钟

Base_Sys_time.c提供最基础的调用,注意此文件提供三点:初始化系统时钟、获取/设置系统实时时钟、delay。

typedef struct
{
 uint32_t SYS_Time_H; // 每Frequency进1
 uint32_t SYS_Time_L; // 24bit 的
}SYS_Time_Type;
typedef struct
{
 uint32_t SYS_Sec;
 uint32_t SYS_Us; // 这里最大 1000 000
}SYS_BaseTIME_Type;
void SYS_Time_Init(int Set);
void SYS_Time_Set(SYS_BaseTIME_Type * time);
void SYS_Time_Get(SYS_BaseTIME_Type * time);
void SYS_Base_Delay(int time, int speed);
void SYS_Delay_us(int n);
void SYS_Delay_ms(int n);

MODE_Time.c提供用户使用的时钟函数,提供用户层能使用的数据Real_TIME_Type,包含UTCCaven_BaseTIME_Type Time,日期struct tm *date

typedef struct
{
	volatile char SYNC_Flag;
	Caven_BaseTIME_Type Time;
 struct tm *date;
}Real_TIME_Type;
Mode_Init.TIME(ENABLE);
Mode_Use.TIME.Delay_Ms(10);
Mode_Use.TIME.Get_BaseTIME_pFun();
Mode_Use.TIME.MODE_TIME_Get_Date(8*60*60);		// 获取东8区的日期
多任务
  • 时间触发函数
  • 事件任务函数

Time_Handle.c提供时间触发函数,只由时间触发,但是并不执行任务,是否执行任务请访问Task_Overtime_Type结构体。

typedef struct
{
 volatile Caven_BaseTIME_Type Set_time;
 volatile Caven_BaseTIME_Type Begin_time;
 volatile char Trigger_Flag; //[000][1][000]
 volatile char Flip_falg; //[000][111][000] only Read
 int Switch;
}Task_Overtime_Type;
int API_Task_Timer (Task_Overtime_Type *task,Caven_BaseTIME_Type now_time);

Caven_event_frame.c提供事件任务函数。

typedef struct
{
 int events_num;
 unsigned char events[CAVEN_EVENTS_MAX];
 D_pFun events_pFun[CAVEN_EVENTS_MAX];
}Caven_event_Type;
int Caven_new_event_Fun(Caven_event_Type *events,D_pFun event_pFun,int *handle);
int Caven_delete_event_Fun(Caven_event_Type *events,int *handle);
int Caven_trigger_event_Fun(Caven_event_Type *events,int const handle,char data);
int Caven_handle_event_Fun(Caven_event_Type *events);

例如

Caven_event_Type SYS_events;
int BZZ_event_Handle = 0;
void BZZ_event_task_Fun (void * data)
{
 int temp_data = *(int *)data;
 if (temp_data) {
		Mode_Use.BZZ.SET_pFun(ENABLE);
 Mode_Use.BZZ.SET_pFun(DISABLE);
 }
 else {
 Mode_Use.BZZ.SET_pFun(DISABLE);
 }
 *(int *)data = 0;		// 退出任务
}
void Main_Init(void)
{
 Mode_Index();
 Mode_Init.TIME(ENABLE);
	Mode_Init.LED(ENABLE);
 Mode_Init.BZZ(ENABLE);
 
 Caven_new_event_Fun(&SYS_events,BZZ_event_task_Fun,&BZZ_event_Handle); // 创建BZZ事件任务
}
int main (void)
{
 Caven_BaseTIME_Type now_time;
 Main_Init();
 
 now_time.SYS_Sec = 1742200000;
 Mode_Use.TIME.Set_BaseTIME_pFun(now_time);
 now_time = Mode_Use.TIME.Get_BaseTIME_pFun();
 Task_Overtime_Type LED_Task = {
 .Switch = 1,
 .Begin_time = now_time,
 .Set_time.SYS_Sec = 1,
 .Set_time.SYS_Us = 500000,
 .Flip_falg = 1,
 };
	API_Task_Timer (&LED_Task,now_time); // 创建LED时间任务
	
 while(1)
 {
 Mode_Use.LED.SET_pFun(1,LED_Task.Flip_falg);	// 访问任务状态
 if(LED_Task.Trigger_Flag)
 {
 Caven_trigger_event_Fun(&SYS_events,BZZ_event_Handle,1);	// 触发事件
 }
 Caven_handle_event_Fun(&SYS_events);			// 事件运行函数
 }
}

由例程看出,LED灯被LED_Task结构体控制,每1.5s交换一次状态,每次交换状态,BZZ都会响一次。


硬件芯片资源

image-20240402181020882

支持芯片

M0: STM32F030F4

M0+:HC32L110

M3: STM32F103RC、GD32F103RC

M4: STM32F405RC、AT32F415RC、AT32F425RC、AT32F403ARC

RISC-V: CH32V203C8T6、CH32V307RET6(这玩意Flash不行)

image-20240402181034923

通信:

  1. UART(硬)
  2. SPI(软、硬)(硬件->【普\DMA】)
  3. IIC(软)
  4. USB(部分)(硬)
  5. CAN(部分)(硬)

模拟:

  1. ADC(普、DMA)
  2. DAC(部分)

系统时钟:

  1. SYS_TICK
  2. 看门狗(选)

Flash

  1. 掉电保存
  2. Bootloard(部分)

数字(时钟输入输出):

  1. 输出PWM
  2. 输入捕获(编码)

GPIO:

  1. 输入
  2. 输出

你可能会遇到的问题...

Keil会用吧?

WCH-Link驱动会装吧?

Github会clone吧?

满足这些你就可以正常使用了!

MDK设置

image-20240402181043064

下载方式是CMSIS-DAP,也就是所谓的WCH-Link,按照上述步骤你就可以看到这个

如果上述有问题请参考一下内容(如果你认真看完这些,依旧没解决,我可以帮帮你;如果你没有认真看,那我只能请你熟读并背诵了)

WCH-Link相关:看这里 如果需要给WCH-Link下载程序,那么需要将CH549的D-接到VDD激活CH549的USB下载模式,然后如果是V1.0版本的WCH-Link固件,需要根据TX接GND去切换RSIC-V/ARM下载模式。当然你可以选择直接下载ARM专用固件(WCH-Link_APP_IAP_ARM.bin)或者RSIC-V专用固件(WCH-Link_APP_IAP_RV.bin)。

芯片检测不到:看这里 的【 三、设置keil 章节】的 【3、配置好相应的Flash Download选项】

如果问题还是没有解决:看这里


如何找到UP?

卡文迪许怪

qq讨论群:455839434

GitHub & Bilibili

About

ARM and RISC-V

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

AltStyle によって変換されたページ (->オリジナル) /