mirror of
https://github.com/IcedRooibos/py32f0-template.git
synced 2025-10-28 16:32:05 -07:00
docs: add readme
This commit is contained in:
parent
4c758347e4
commit
fb85d299d3
6
Makefile
6
Makefile
@ -8,7 +8,7 @@ BUILD_DIR = Build
|
||||
##### Options #####
|
||||
|
||||
# Use LL library instead of HAL
|
||||
USE_LL_LIB ?= y
|
||||
USE_LL_LIB ?= n
|
||||
# Enable printf float %f support, y:yes, n:no
|
||||
ENABLE_PRINTF_FLOAT ?= n
|
||||
# Build with CMSIS DSP functions, y:yes, n:no
|
||||
@ -20,7 +20,7 @@ FLASH_PROGRM ?= pyocd
|
||||
|
||||
#ARM_TOOCHAIN ?= /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin
|
||||
#ARM_TOOCHAIN ?= /opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin
|
||||
ARM_TOOCHAIN ?= /opt/gcc-arm/arm-gnu-toolchain-12.2.mpacbti-bet1-x86_64-arm-none-eabi/bin
|
||||
ARM_TOOCHAIN ?= /opt/gcc-arm/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin
|
||||
|
||||
# path to JLinkExe
|
||||
JLINKEXE ?= /opt/SEGGER/JLink/JLinkExe
|
||||
@ -34,7 +34,7 @@ PYOCD_DEVICE ?= py32f003x8
|
||||
|
||||
##### Paths ############
|
||||
|
||||
# Link descript file
|
||||
# Link descript file: py32f003x6.ld, py32f003x8.ld, py32f030x6.ld, py32f030x8.ld
|
||||
LDSCRIPT = Libraries/LDScripts/py32f003x8.ld
|
||||
# Library build flags: PY32F030x3, PY32F030x4, PY32F030x6, PY32F030x7, PY32F030x8, PY32F003x4, PY32F003x6, PY32F003x8
|
||||
LIB_FLAGS = PY32F003x8
|
||||
|
||||
205
README.md
205
README.md
@ -1 +1,206 @@
|
||||
# py32f0-template
|
||||
|
||||
* Puya PY32F003/030 template project for GNU Arm Embedded Toolchain
|
||||
* Supported programmers: J-Link, DAPLink/PyOCD
|
||||
* Supported IDE: VSCode
|
||||
|
||||
# File Structure
|
||||
|
||||
```
|
||||
├── Build # Build results
|
||||
├── Examples
|
||||
│ ├── FreeRTOS # FreeRTOS examples
|
||||
│ ├── Raw # NonFreeRTOS examples
|
||||
│ └── Raw_LL # NonFreeRTOS examples with low layer lib
|
||||
├── Libraries
|
||||
│ ├── BSP # SysTick delay and printf for debug
|
||||
│ ├── BSP_LL # SysTick delay and printf for debug
|
||||
│ ├── CMSIS
|
||||
│ ├── LDScripts # ld files
|
||||
│ ├── PY32F0xx_HAL_Driver # MCU peripheral driver
|
||||
│ └── PY32F0xx_LL_Driver # MCU low layer peripheral driver
|
||||
├── Makefile # Make config
|
||||
├── Misc
|
||||
│ └── Devices # FLM files
|
||||
├── README.md
|
||||
├── rules.mk # Pre-defined rules include in Makefile
|
||||
└── User # User application code
|
||||
```
|
||||
|
||||
# Requirements
|
||||
|
||||
* PY32F0 EVB or boards of PY32F003/030 series
|
||||
* Programmer
|
||||
* J-Link: J-Link OB programmer
|
||||
* PyOCD: DAPLink or J-Link
|
||||
* SEGGER J-Link Software and Documentation pack [https://www.segger.com/downloads/jlink/](https://www.segger.com/downloads/jlink/)
|
||||
* PyOCD [https://pyocd.io/](https://pyocd.io/)
|
||||
* GNU Arm Embedded Toolchain
|
||||
|
||||
# Building
|
||||
|
||||
## 1. Install GNU Arm Embedded Toolchain
|
||||
|
||||
Download the toolchain from [Arm GNU Toolchain Downloads](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads) according to your pc architecture, extract the files
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/gcc-arm/
|
||||
sudo tar xvf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz -C /opt/gcc-arm/
|
||||
cd /opt/gcc-arm/
|
||||
sudo chown -R root:root arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/
|
||||
```
|
||||
## 2. Option #1: Install SEGGER J-Link
|
||||
|
||||
Download and install JLink from [J-Link / J-Trace Downloads](https://www.segger.com/downloads/jlink/).
|
||||
|
||||
```bash
|
||||
# installation command for .deb
|
||||
sudo dpkg -i JLink_Linux_V770a_x86_64.deb
|
||||
```
|
||||
The default installation directory is */opt/SEGGER*
|
||||
|
||||
Copy all .FLM files from [Project directory]/Misc/Devices/Puya to [JLink directory]/Devices/Puya
|
||||
|
||||
```bash
|
||||
cd py32f0-template
|
||||
sudo cp -r Misc/Devices/* /opt/SEGGER/JLink/Devices/
|
||||
```
|
||||
|
||||
Edit JLinkDevices.xml
|
||||
|
||||
```bash
|
||||
sudo vi /opt/SEGGER/JLink/JLinkDevices.xml
|
||||
```
|
||||
Add the following lines in `<DataBase>` section
|
||||
|
||||
```xml
|
||||
<!-- -->
|
||||
<!-- Puya -->
|
||||
<!-- -->
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F003X4" WorkRAMAddr="0x20000000" WorkRAMSize="0x800" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_16K" BaseAddr="0x08000000" MaxSize="0x4000" Loader="Devices/Puya/PY32F003xx_16.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F003X6" WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_32K" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F003xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F003X8" WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_64K" BaseAddr="0x08000000" MaxSize="0x10000" Loader="Devices/Puya/PY32F003xx_64.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F030X4" WorkRAMAddr="0x20000000" WorkRAMSize="0x800" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_16K" BaseAddr="0x08000000" MaxSize="0x4000" Loader="Devices/Puya/PY32F030xx_16.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F030X6" WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_32K" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F030xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F030X7" WorkRAMAddr="0x20000000" WorkRAMSize="0x1800" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_48K" BaseAddr="0x08000000" MaxSize="0xC000" Loader="Devices/Puya/PY32F030xx_48.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
<Device>
|
||||
<ChipInfo Vendor="Puya" Name="PY32F030X8" WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
|
||||
<FlashBankInfo Name="Flash_64K" BaseAddr="0x08000000" MaxSize="0x10000" Loader="Devices/Puya/PY32F030xx_64.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
|
||||
</Device>
|
||||
```
|
||||
|
||||
|
||||
## 2. Option #2: Install PyOCD
|
||||
|
||||
Don't install from apt repository, because the version 0.13.1+dfsg-1 is too low for J-Link probe.
|
||||
|
||||
Install PyOCD from pip
|
||||
|
||||
```bash
|
||||
pip uninstall pyocd
|
||||
```
|
||||
This will install PyOCD into:
|
||||
```
|
||||
/home/[user]/.local/bin/pyocd
|
||||
/home/[user]/.local/bin/pyocd-gdbserver
|
||||
/home/[user]/.local/lib/python3.10/site-packages/pyocd-0.34.2.dist-info/*
|
||||
/home/[user]/.local/lib/python3.10/site-packages/pyocd/*
|
||||
```
|
||||
In Ubuntu, .profile will take care of the PATH, run `source ~/.profile` to make pyocd command available
|
||||
|
||||
## 3. Clone This Repository
|
||||
|
||||
Clone this repository to local workspace
|
||||
```bash
|
||||
git clone https://github.com/IOsetting/py32f0-template.git
|
||||
```
|
||||
|
||||
## 4. Edit Makefile
|
||||
|
||||
Change the settings in Makefile
|
||||
* make sure **ARM_TOOCHAIN** points to the correct path of arm-none-eabi-gcc
|
||||
* If you use J-Link, **FLASH_PROGRM** can be jlink or pyocd
|
||||
* If you use DAPLink, set **FLASH_PROGRM** to pyocd
|
||||
* ST-LINK is not supported yet. ST-LINK works in Windows Keil5, but I failed to make it work in Ubuntu
|
||||
* Puya provides two sets of library, HAL lib and LL lib, switch in **USE_LL_LIB** option
|
||||
* **ENABLE_PRINTF_FLOAT** will add `-u _printf_float` to link options, which will significantly increase the binary size.
|
||||
|
||||
```makefile
|
||||
##### Project #####
|
||||
|
||||
PROJECT ?= app
|
||||
# The path for generated files
|
||||
BUILD_DIR = Build
|
||||
|
||||
|
||||
##### Options #####
|
||||
|
||||
# Use LL library instead of HAL
|
||||
USE_LL_LIB ?= y
|
||||
# Enable printf float %f support, y:yes, n:no
|
||||
ENABLE_PRINTF_FLOAT ?= n
|
||||
# Build with CMSIS DSP functions, y:yes, n:no
|
||||
USE_DSP ?= n
|
||||
# Programmer, jlink or pyocd
|
||||
FLASH_PROGRM ?= pyocd
|
||||
|
||||
##### Toolchains #######
|
||||
|
||||
ARM_TOOCHAIN ?= /opt/gcc-arm/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin
|
||||
|
||||
# path to JLinkExe
|
||||
JLINKEXE ?= /opt/SEGGER/JLink/JLinkExe
|
||||
# JLink device type, options: PY32F003X4, PY32F003X6, PY32F003X8, PY32F030X6, PY32F030X7, PY32F030X8
|
||||
JLINK_DEVICE ?= PY32F003X8
|
||||
# path to PyOCD
|
||||
PYOCD_EXE ?= pyocd
|
||||
# PyOCD device type, options: py32f003x4, py32f003x6, py32f003x8, py32f030x3, py32f030x4, py32f030x6, py32f030x7, py32f030x8
|
||||
PYOCD_DEVICE ?= py32f003x8
|
||||
|
||||
|
||||
##### Paths ############
|
||||
|
||||
# Link descript file: py32f003x6.ld, py32f003x8.ld, py32f030x6.ld, py32f030x8.ld
|
||||
LDSCRIPT = Libraries/LDScripts/py32f003x8.ld
|
||||
# Library build flags: PY32F030x3, PY32F030x4, PY32F030x6, PY32F030x7, PY32F030x8, PY32F003x4, PY32F003x6, PY32F003x8
|
||||
LIB_FLAGS = PY32F003x8
|
||||
```
|
||||
|
||||
## 5. Compiling And Flashing
|
||||
|
||||
```bash
|
||||
# clean source code
|
||||
make clean
|
||||
# build
|
||||
make
|
||||
# or make with verbose output
|
||||
V=1 make
|
||||
# flash
|
||||
make flash
|
||||
```
|
||||
|
||||
# Try Other Examples
|
||||
|
||||
More examples can be found in *Examples* folder, copy and replace the files under *User* folder to try different examples.
|
||||
|
||||
# Links
|
||||
|
||||
* Puya Product Page(Datasheet & SDK download): https://www.puyasemi.com/cpzx3/info_267_aid_242_kid_235.html
|
||||
|
||||
36
User/main.c
36
User/main.c
@ -33,35 +33,29 @@
|
||||
static void APP_LedConfig(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief 应用程序入口函数.
|
||||
* @param 无
|
||||
* @retval int
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
/* 初始化所有外设,Flash接口,SysTick */
|
||||
/*
|
||||
* Configure the Flash prefetch and the Instruction cache,
|
||||
* the time base source, NVIC and any required global low level hardware
|
||||
* by calling the HAL_MspInit() callback function to be optionally defined in user file
|
||||
* PY32F0xx_hal_msp.c.
|
||||
*/
|
||||
HAL_Init();
|
||||
|
||||
/* 初始化LED */
|
||||
/* LED GPIO init */
|
||||
APP_LedConfig();
|
||||
|
||||
BSP_USART_Config();
|
||||
|
||||
while (1)
|
||||
{
|
||||
/* 延时250ms */
|
||||
HAL_Delay(1000);
|
||||
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
|
||||
printf("echo\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化LED
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
static void APP_LedConfig(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
@ -76,15 +70,8 @@ static void APP_LedConfig(void)
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* GPIO初始化 */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 错误执行函数
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void APP_ErrorHandler(void)
|
||||
{
|
||||
/* 无限循环 */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
@ -92,16 +79,11 @@ void APP_ErrorHandler(void)
|
||||
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/**
|
||||
* @brief 输出产生断言错误的源文件名及行号
|
||||
* @param file:源文件名指针
|
||||
* @param line:发生断言错误的行号
|
||||
* @retval 无
|
||||
* @brief Export assert error source and line number
|
||||
*/
|
||||
void assert_failed(uint8_t *file, uint32_t line)
|
||||
{
|
||||
/* 用户可以根据需要添加自己的打印信息,
|
||||
例如: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||
/* 无限循环 */
|
||||
/* printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user