1 Star 0 Fork 36

lcfmax / f1c200s_library

forked from lhdjply / f1c200s_library 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

项目简介

该项目是为全志F1C100S/F1C200S所编写的库函数,编写风格模仿STM32标准库,使得从STM32过来的人更容易上手。项目以及移植了 cherryusbfatfslvglrt-thread

准备工作

操作系统

windows(linux平台未测试,请自行测试)

编辑环境

推荐使用的编辑环境为VSCode(下载地址链接),是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。

VSCode推荐插件

  • C/C++
  • Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
  • Git Graph

编译器

该项目编译器为arm-none-eabi-gcc(下载地址链接)

编译与下载

编译

在VSCode的菜单栏中依次点击 终端-运行任务-编译

重新编译

在VSCode的菜单栏中依次点击 终端-运行任务-重新编译

下载

下载前,需将板子进入FEL模式,然后在VSCode的菜单栏中依次点击 终端-运行任务-下载

文件夹介绍

文件夹 简介
.gitee gitee平台issue和pr模板
.github github平台issue和pr模板,以及ci检查
.vscode vscode配置文件
bootloader bootloader文件
dsp dsp库(例如arm_mean_f32)
f1cx00s_lib 模仿stm32风格写的库函数
hardware 外设初始化
myresoure 界面左边为lvgl官方例子,界面右边为库函数测试例子。其中库函数例子外设初始化以及功能函数已在hardware,界面例子包括 gpioi2cpwmsdiospiuartusb
pcb 使用嘉立创EDA专业版进行绘制,项目例子都基于该线路板进行编写。
system 任务文件,以及延迟等等
third_party 第三方库,包含cherryusbfatfslvglrt-thread
tools 下载程序工具,code-format工具(需要安装astyle)
user main函数,链接脚本

库函数使用说明

CCU

主要用于初始化各外设时钟,例如 串口SPII2C等等。

例如

CCU_BUS2_GatingClockCmd(CCU_BUS2Gating_UART1, ENABLE);
CCU_BUS2_GatingResetCmd(CCU_BUS2Gating_UART1, ENABLE);

EXTI

初始化

GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

GPIO_AF_Remap(GPIOE, GPIO_PinSource3, GPIO_AF_PE3_EINTE3);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);

EXTI_InitStructure.EXTI_Line = EXTI_Line_3;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(EXTIE, &EXTI_InitStructure);

rt_hw_interrupt_install(PIOE_INTERRUPT, EXTIE_IRQHandler, NULL, "exite_irq");
rt_hw_interrupt_umask(PIOE_INTERRUPT);

中断

void EXTIE_IRQHandler(int irqno, void *param)
{
  if (EXTI_GetFlagStatus(EXTIE, EXTI_Line_3) == SET)
  {
    // your code
    .....
    EXTI_ClearFlag(EXTIE, EXTI_Line_3);
  }
}

GPIO

初始化

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);

置0

GPIO_ResetBits(GPIOE, GPIO_Pin_5);

置1

GPIO_SetBits(GPIOE, GPIO_Pin_5);

I2C

初始化

GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;

CCU_BUS2_GatingClockCmd(CCU_BUS2Gating_I2C0, ENABLE);
CCU_BUS2_GatingResetCmd(CCU_BUS2Gating_I2C0, ENABLE);

GPIO_AF_Remap(GPIOE, GPIO_PinSource11, GPIO_AF_PE11_I2C0_SCK);
GPIO_AF_Remap(GPIOE, GPIO_PinSource12, GPIO_AF_PE12_I2C0_SDA);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &GPIO_InitStructure);

I2C_DeInit(I2C0);
I2C_InitStructure.SlaveAddress = I2C_ADDR;
I2C_InitStructure.ClockSpeed = 400 * 1000;
I2C_Init(I2C0, &I2C_InitStructure);

I2C_Cmd(I2C0, ENABLE);

写操作

I2C_Write_Reg(GT911_I2C, I2C_REG_SIZE_16BIT, reg, buf, len);

读操作

I2C_Read_Reg(GT911_I2C, I2C_REG_SIZE_16BIT, reg, buf, len);

LCD

例子查看hardware\src\lcd.c

如需修改屏幕参数,请在hardware\inc\lcd.h中修改。

#define LCD_FREQ 30000000//30Mhz
#define MY_DISP_HOR_RES 800
#define MY_DISP_VER_RES 480

// LCD驱动参数设置
#define LCD_HOR_PULSE_WIDTH 8 // 水平脉宽
#define LCD_HOR_BACK_PORCH 8 // 水平后廊
#define LCD_HOR_FRONT_PORCH 4 // 水平前廊

#define LCD_VER_PULSE_WIDTH 8 // 垂直脉宽
#define LCD_VER_BACK_PORCH 10 // 垂直后廊
#define LCD_VER_FRONT_PORCH 4 // 垂直前廊

PWM

初始化

PWM_InitTypeDef PWM_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_AF_Remap(GPIOE, GPIO_PinSource6, GPIO_AF_PE6_PWM1);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);

PWM_InitStructure.channel = PWM_CHANNEL_1;
PWM_InitStructure.duty_cycle = 0;
PWM_InitStructure.period = 463000; // 2160hz :1000000000/463000
PWM_InitStructure.polarity = 1;
PWM_Init(&PWM_InitStructure);

PWM_Cmd(PWM_CHANNEL_1, ENABLE);

修改PWM占空比

PWM_Set_Duty(PWM_CHANNEL_1, value);

SDIO

请配合FATFS进行使用,例子查看hardware\src\sdcard.c

SPI

初始化

SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

CCU_BUS0_GatingClockCmd(CCU_BUS0Gating_SPI0, ENABLE);
CCU_BUS0_GatingResetCmd(CCU_BUS0Gating_SPI0, ENABLE);

GPIO_AF_Remap(GPIOC, GPIO_PinSource0, GPIO_AF_PC0_SPI0_CLK);
GPIO_AF_Remap(GPIOC, GPIO_PinSource2, GPIO_AF_PC2_SPI0_MISO);
GPIO_AF_Remap(GPIOC, GPIO_PinSource3, GPIO_AF_PC3_SPI0_MOSI);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);

/*W25QXX_CS*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);

W25QXX_CS = 1;

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI0, &SPI_InitStructure);

SPI_Cmd(SPI0, ENABLE); // 使能SPI外设

写操作

SPI_TransmitData8(SPI0, TxData);

读操作

ReceiveData8(SPI0);

UART

初始化

GPIO_InitTypeDef GPIO_InitStructure;
UART_InitTypeDef UART_InitStructure;

GPIO_AF_Remap(GPIOA, GPIO_PinSource2, GPIO_AF_PA2_UART1_RX);
GPIO_AF_Remap(GPIOA, GPIO_PinSource3, GPIO_AF_PA3_UART1_TX);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_DriveCurrent = GPIO_DriveCurrent_Level3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

CCU_BUS2_GatingClockCmd(CCU_BUS2Gating_UART1, ENABLE);
CCU_BUS2_GatingResetCmd(CCU_BUS2Gating_UART1, ENABLE);

UART_InitStructure.UART_BaudRate = 115200;
UART_InitStructure.UART_WordLength = UART_WordLength_8b;
UART_InitStructure.UART_StopBits = UART_StopBits_1;
UART_InitStructure.UART_Parity = UART_Parity_No;
UART_Init(UART1, &UART_InitStructure);

UART_ITConfig(UART1, UART_IT_ERBFI, ENABLE);

rt_hw_interrupt_install(UART1_INTERRUPT, UART1_IRQHandler, NULL, "uart1_irq");
rt_hw_interrupt_umask(UART1_INTERRUPT);

写操作

for(uint16_t i = 0; i < strlen((char *)uart_Data.TXD_BUF); i++)
{
  UART_SendData(UART1, uart_Data.TXD_BUF[i]);
  while(UART_Get_Status(UART1, UART_USR_TFNF) != SET)
  {
  }
}

读操作

UART_ReceiveData(UART1);

USB

请配合Cherryusb进行使用。

主机还需配合FATFS,例子查看hardware\src\usb_phy.chardware\src\usbh_msc_config.csystem\src\task.c中的USB_task以及third_party\fatfs\diskio.c。 从机例子未使用,如需使用可查看hardware\src\usbd_msc_config.c,然后调用usbd_msc_init即可。

WDOG

初始化

WDOG_Set_Mode(WDOG_RST_MODE);
WDOG_Set_Value(1);//喂狗周期为1s
WDOG_Enable();

喂狗

WDOG_Feed();
MIT License Copyright (c) 2023 lhdjply Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

芯片为全志F1C100S或者F1C200S,模仿STM32标准库风格编写的库函数 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/lcfmax/f1c200s_library.git
git@gitee.com:lcfmax/f1c200s_library.git
lcfmax
f1c200s_library
f1c200s_library
master

搜索帮助