Skip to content

Commit 60b4269

Browse files
authored
Merge pull request #60 from Air-duino/feature/Air32RCC
添加Air32的高主频配置
2 parents 8e21d91 + c51737c commit 60b4269

File tree

7 files changed

+222
-94
lines changed

7 files changed

+222
-94
lines changed

boards.txt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ menu.dbg=Debug symbols and core logs
1414
menu.rtlib=C Runtime Library
1515
menu.upload_method=Upload method
1616

17+
# Air001 设置方式
1718
menu.ClockSourceAndFrequency=Clock Source and Frequency
19+
20+
# Air32 设置
21+
menu.ClockSoure=Clock Source
22+
menu.SysFreq=System Frequency
23+
1824
menu.LowSpeedClockSource=Low Speed Clock Source
1925

2026
menu.SupplyVoltage=Supply Voltage
@@ -209,6 +215,25 @@ Air32F103xx.menu.UploadSpeed.2400.upload.speed=2400
209215
Air32F103xx.menu.UploadSpeed.1200=1200
210216
Air32F103xx.menu.UploadSpeed.1200.upload.speed=1200
211217

218+
Air32F103xx.menu.ClockSoure.HSE8M=HSE (8Mhz)
219+
Air32F103xx.menu.ClockSoure.HSE8M.build.ClockSoureTemp=-DUSE_HSE
220+
Air32F103xx.menu.ClockSoure.HSE8M.build.ClockSoure=8000000L
221+
Air32F103xx.menu.ClockSoure.HSE16M=HSE (16Mhz)
222+
Air32F103xx.menu.ClockSoure.HSE16M.build.ClockSoureTemp=-DUSE_HSE
223+
Air32F103xx.menu.ClockSoure.HSE16M.build.ClockSoure=16000000L
224+
Air32F103xx.menu.ClockSoure.HSI8M=HSI (8Mhz)
225+
Air32F103xx.menu.ClockSoure.HSI8M.build.ClockSoureTemp=-DUSE_HSI
226+
Air32F103xx.menu.ClockSoure.HSI8M.build.ClockSoure=8000000L
227+
228+
Air32F103xx.menu.SysFreq.PCLK72M=72Mhz
229+
Air32F103xx.menu.SysFreq.PCLK72M.build.f_cpu=72000000L
230+
Air32F103xx.menu.SysFreq.PCLK64M=64Mhz
231+
Air32F103xx.menu.SysFreq.PCLK64M.build.f_cpu=64000000L
232+
Air32F103xx.menu.SysFreq.PCLK216M=216Mhz
233+
Air32F103xx.menu.SysFreq.PCLK216M.build.f_cpu=216000000L
234+
Air32F103xx.menu.SysFreq.PCLK256M=256Mhz
235+
Air32F103xx.menu.SysFreq.PCLK256M.build.f_cpu=256000000L
236+
212237
Air32F103xx.menu.pnum.AIR32F103CB=Air32F103CBT6
213238
Air32F103xx.menu.pnum.AIR32F103CB.upload.maximum_size=131072
214239
Air32F103xx.menu.pnum.AIR32F103CB.build.product_line=AIR32F103xB
@@ -221,7 +246,7 @@ Air32F103xx.menu.BootConnection.defaule.upload.boot=default_reset
221246
Air32F103xx.menu.BootConnection.direct=direct connect
222247
Air32F103xx.menu.BootConnection.direct.upload.boot=direct_connect
223248

224-
Air32F103xx.build.extra_flags=-DAIR32F1xx
249+
Air32F103xx.build.extra_flags={build.ClockSoureTemp} -DCLOCK_SOURCE={build.ClockSoure} -DF_CPU={build.f_cpu} -DAIR32F1xx
225250

226251
###############################
227252
# AirM2M Air001 Board

cores/AirMCU/wiring_analog.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@
2525
#define ADC_RANGE 4096
2626
#endif
2727

28+
#if defined(AIR32F1xx)
29+
#define VTEMP 1430
30+
#define AVG_SLOPE 4300
31+
#define VREFINT 1200
32+
#endif
33+
34+
#if defined(AIR32C0xx)
35+
#define CALX_TEMP 30
36+
#else
37+
#define CALX_TEMP 25
38+
#endif
39+
2840
#ifdef __cplusplus
2941
extern "C" {
3042
#endif

platform.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,18 @@ tools.AirISP.bootloader.protocol=serial
200200
tools.AirISP.bootloader.params.verbose=
201201
tools.AirISP.bootloader.params.quiet=
202202
tools.AirISP.bootloader.pattern=
203+
204+
# Debugger configuration (general options)
205+
# ----------------------------------------
206+
# EXPERIMENTAL feature:
207+
# - this is alpha and may be subject to change without notice
208+
# debug.executable={build.path}/{build.project_name}.elf
209+
# debug.toolchain=gcc
210+
# debug.toolchain.path={compiler.path}
211+
# debug.toolchain.prefix=arm-none-eabi-
212+
# debug.server=pyocd
213+
# debug.server.pyocd.path=
214+
# debug.server.pyocd.scripts_dir=
215+
# debug.server.pyocd.script=
216+
# debug.server.pyocd.cmsisPack="D:\\GitHub\\luatos-soc-air001\\PACK\\Keil.AIR001_DFP.1.1.0.pack"
217+
# debug.server.pyocd.targetId="Air001Dev"

system/Arduino-Air32F103-Drivers

variants/AIR32F103/F103CB/generic_clock.c

Lines changed: 0 additions & 90 deletions
This file was deleted.
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
/*
2+
*******************************************************************************
3+
* Copyright (c) 2023-2023, AirM2M, HalfSweet
4+
* All rights reserved.
5+
*
6+
* This software component is licensed by ST under BSD 3-Clause license,
7+
* the "License"; You may not use this file except in compliance with the
8+
* License. You may obtain a copy of the License at:
9+
* opensource.org/licenses/BSD-3-Clause
10+
*
11+
*******************************************************************************
12+
*/
13+
#if defined(ARDUINO_AIR32F103CB)
14+
#include "pins_arduino.h"
15+
16+
#include <stdint.h>
17+
18+
enum class ClockSource : uint8_t
19+
{
20+
HSI = 0,
21+
HSE = 1,
22+
};
23+
24+
namespace CuluateClock
25+
{
26+
constexpr uint8_t GetPLLMultiplier(ClockSource soure, uint32_t sourceFreq, uint32_t sysFrequency)
27+
{
28+
if (soure == ClockSource::HSI)
29+
{
30+
sourceFreq /= 2;
31+
}
32+
if (sysFrequency % sourceFreq != 0)
33+
{
34+
return (sysFrequency / sourceFreq) - 1;
35+
}
36+
else
37+
{
38+
return sysFrequency / sourceFreq;
39+
}
40+
}
41+
42+
constexpr uint32_t Get_RCC_CFGR_PLLMULL(uint8_t multiplier)
43+
{
44+
uint32_t mulTable[] = {
45+
RCC_PLL_MUL2, RCC_PLL_MUL3, RCC_PLL_MUL4, RCC_PLL_MUL5, RCC_PLL_MUL6, RCC_PLL_MUL7, RCC_PLL_MUL8, RCC_PLL_MUL9,
46+
RCC_PLL_MUL10, RCC_PLL_MUL11, RCC_PLL_MUL12, RCC_PLL_MUL13, RCC_PLL_MUL14, RCC_PLL_MUL15, RCC_PLL_MUL16, RCC_PLL_MUL17,
47+
RCC_PLL_MUL18, RCC_PLL_MUL19, RCC_PLL_MUL20, RCC_PLL_MUL21, RCC_PLL_MUL22, RCC_PLL_MUL23, RCC_PLL_MUL24, RCC_PLL_MUL25,
48+
RCC_PLL_MUL26, RCC_PLL_MUL27, RCC_PLL_MUL28, RCC_PLL_MUL29, RCC_PLL_MUL30, RCC_PLL_MUL31, RCC_PLL_MUL32};
49+
if (multiplier > 32 || multiplier < 2)
50+
{
51+
return 0xFFFFFFFF;
52+
}
53+
else
54+
{
55+
return mulTable[multiplier - 2];
56+
}
57+
}
58+
}
59+
60+
/**
61+
* @brief System Clock Configuration
62+
* @param None
63+
* @retval None
64+
*/
65+
WEAK void SystemClock_Config(void)
66+
#if defined(USBCON)
67+
{
68+
RCC_OscInitTypeDef RCC_OscInitStruct = {};
69+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
70+
RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
71+
72+
/** Initializes the RCC Oscillators according to the specified parameters
73+
* in the RCC_OscInitTypeDef structure.
74+
*/
75+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
76+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
77+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
78+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
79+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
80+
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
81+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
82+
{
83+
Error_Handler();
84+
}
85+
/** Initializes the CPU, AHB and APB buses clocks
86+
*/
87+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
88+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
89+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
90+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
91+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
92+
93+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
94+
{
95+
Error_Handler();
96+
}
97+
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
98+
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL;
99+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
100+
{
101+
Error_Handler();
102+
}
103+
}
104+
#else
105+
{
106+
RCC_OscInitTypeDef RCC_OscInitStruct = {};
107+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
108+
109+
/** Initializes the RCC Oscillators according to the specified parameters
110+
* in the RCC_OscInitTypeDef structure.
111+
*/
112+
#if defined(USE_HSI)
113+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
114+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
115+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
116+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
117+
constexpr uint32_t sourceFreq = CLOCK_SOURCE;
118+
constexpr auto clockSource = ClockSource::HSI;
119+
constexpr auto sysClkSource = RCC_SYSCLKSOURCE_HSI;
120+
#elif defined(USE_HSE)
121+
#undef HSE_VALUE
122+
#define HSE_VALUE CLOCK_SOURCE
123+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
124+
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
125+
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
126+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
127+
constexpr uint32_t sourceFreq = CLOCK_SOURCE;
128+
constexpr auto clockSource = ClockSource::HSE;
129+
constexpr auto sysClkSource = RCC_SYSCLKSOURCE_HSE;
130+
#else
131+
#error "No clock source defined"
132+
#endif
133+
134+
constexpr uint32_t sysFrequency = F_CPU;
135+
constexpr uint8_t multiplier = CuluateClock::GetPLLMultiplier(clockSource, sourceFreq, sysFrequency);
136+
if (multiplier < 2)
137+
{
138+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF;
139+
RCC_ClkInitStruct.SYSCLKSource = sysClkSource;
140+
}
141+
else
142+
{
143+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
144+
RCC_OscInitStruct.PLL.PLLMUL = CuluateClock::Get_RCC_CFGR_PLLMULL(multiplier);
145+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
146+
}
147+
148+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
149+
{
150+
Error_Handler();
151+
}
152+
/** Initializes the CPU, AHB and APB buses clocks
153+
*/
154+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
155+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
156+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
157+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
158+
159+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
160+
{
161+
Error_Handler();
162+
}
163+
}
164+
#endif /* USBCON */
165+
166+
#endif /* ARDUINO_GENERIC_* */

variants/AIR32F103/F103CB/variant_generic.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,10 @@
138138
// Default pin used for generic 'Serial' instance
139139
// Mandatory for Firmata
140140
#ifndef PIN_SERIAL_RX
141-
#define PIN_SERIAL_RX PA3
141+
#define PIN_SERIAL_RX PA10
142142
#endif
143143
#ifndef PIN_SERIAL_TX
144-
#define PIN_SERIAL_TX PA2
144+
#define PIN_SERIAL_TX PA9
145145
#endif
146146

147147
/*----------------------------------------------------------------------------

0 commit comments

Comments
 (0)