Initial commit
This commit is contained in:
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.pio
|
||||||
|
.vscode/.browse.c_cpp.db*
|
||||||
|
.vscode/c_cpp_properties.json
|
||||||
|
.vscode/launch.json
|
||||||
|
.vscode/ipch
|
||||||
10
.vscode/extensions.json
vendored
Normal file
10
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
|
// for the documentation about the extensions.json format
|
||||||
|
"recommendations": [
|
||||||
|
"platformio.platformio-ide"
|
||||||
|
],
|
||||||
|
"unwantedRecommendations": [
|
||||||
|
"ms-vscode.cpptools-extension-pack"
|
||||||
|
]
|
||||||
|
}
|
||||||
44
boards/fly_buffer_f072c8.json
Normal file
44
boards/fly_buffer_f072c8.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"variant_h": "variant_FLY_BUFFER_F072Cx.h"
|
||||||
|
},
|
||||||
|
"core": "stm32",
|
||||||
|
"cpu": "cortex-m0",
|
||||||
|
"extra_flags": "-DSTM32F0 -DSTM32F072xB",
|
||||||
|
"f_cpu": "48000000L",
|
||||||
|
"framework_extra_flags": {
|
||||||
|
"arduino": "-DCUSTOM_PERIPHERAL_PINS"
|
||||||
|
},
|
||||||
|
"mcu": "stm32f072c8t6",
|
||||||
|
"variant": "F072C8",
|
||||||
|
"product_line": "STM32F072xB"
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "STM32F072C8",
|
||||||
|
"openocd_target": "stm32f0x",
|
||||||
|
"svd_path": "STM32F072x.svd"
|
||||||
|
},
|
||||||
|
"frameworks": [
|
||||||
|
"arduino",
|
||||||
|
"cmsis",
|
||||||
|
"libopencm3",
|
||||||
|
"stm32cube"
|
||||||
|
],
|
||||||
|
"name": "Fly Buffer F072C8 (64 kB)",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 16384,
|
||||||
|
"maximum_size": 65536,
|
||||||
|
"protocol": "dfu",
|
||||||
|
"protocols": [
|
||||||
|
"blackmagic",
|
||||||
|
"cmsis-dap",
|
||||||
|
"dfu",
|
||||||
|
"jlink",
|
||||||
|
"serial",
|
||||||
|
"stlink"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"url": "",
|
||||||
|
"vendor": ""
|
||||||
|
}
|
||||||
37
include/README
Normal file
37
include/README
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
This directory is intended for project header files.
|
||||||
|
|
||||||
|
A header file is a file containing C declarations and macro definitions
|
||||||
|
to be shared between several project source files. You request the use of a
|
||||||
|
header file in your project source file (C, C++, etc) located in `src` folder
|
||||||
|
by including it, with the C preprocessing directive `#include'.
|
||||||
|
|
||||||
|
```src/main.c
|
||||||
|
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Including a header file produces the same results as copying the header file
|
||||||
|
into each source file that needs it. Such copying would be time-consuming
|
||||||
|
and error-prone. With a header file, the related declarations appear
|
||||||
|
in only one place. If they need to be changed, they can be changed in one
|
||||||
|
place, and programs that include the header file will automatically use the
|
||||||
|
new version when next recompiled. The header file eliminates the labor of
|
||||||
|
finding and changing all the copies as well as the risk that a failure to
|
||||||
|
find one copy will result in inconsistencies within a program.
|
||||||
|
|
||||||
|
In C, the convention is to give header files names that end with `.h'.
|
||||||
|
|
||||||
|
Read more about using header files in official GCC documentation:
|
||||||
|
|
||||||
|
* Include Syntax
|
||||||
|
* Include Operation
|
||||||
|
* Once-Only Headers
|
||||||
|
* Computed Includes
|
||||||
|
|
||||||
|
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
||||||
46
lib/README
Normal file
46
lib/README
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
This directory is intended for project specific (private) libraries.
|
||||||
|
PlatformIO will compile them to static libraries and link into the executable file.
|
||||||
|
|
||||||
|
The source code of each library should be placed in a separate directory
|
||||||
|
("lib/your_library_name/[Code]").
|
||||||
|
|
||||||
|
For example, see the structure of the following example libraries `Foo` and `Bar`:
|
||||||
|
|
||||||
|
|--lib
|
||||||
|
| |
|
||||||
|
| |--Bar
|
||||||
|
| | |--docs
|
||||||
|
| | |--examples
|
||||||
|
| | |--src
|
||||||
|
| | |- Bar.c
|
||||||
|
| | |- Bar.h
|
||||||
|
| | |- library.json (optional. for custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
|
||||||
|
| |
|
||||||
|
| |--Foo
|
||||||
|
| | |- Foo.c
|
||||||
|
| | |- Foo.h
|
||||||
|
| |
|
||||||
|
| |- README --> THIS FILE
|
||||||
|
|
|
||||||
|
|- platformio.ini
|
||||||
|
|--src
|
||||||
|
|- main.c
|
||||||
|
|
||||||
|
Example contents of `src/main.c` using Foo and Bar:
|
||||||
|
```
|
||||||
|
#include <Foo.h>
|
||||||
|
#include <Bar.h>
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
The PlatformIO Library Dependency Finder will find automatically dependent
|
||||||
|
libraries by scanning project source files.
|
||||||
|
|
||||||
|
More information about PlatformIO Library Dependency Finder
|
||||||
|
- https://docs.platformio.org/page/librarymanager/ldf.html
|
||||||
396
lib/buffer/buffer.cpp
Normal file
396
lib/buffer/buffer.cpp
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
/**
|
||||||
|
***************************************************************************************
|
||||||
|
* @file buffer.cpp
|
||||||
|
* @author lijihu
|
||||||
|
* @version V1.0.0
|
||||||
|
* @date 2025/05/10
|
||||||
|
* @brief 实现缓冲器功能
|
||||||
|
*缓冲器说明
|
||||||
|
光感:遮挡1,不遮挡0;
|
||||||
|
耗材开关:有耗材0,无耗材1;
|
||||||
|
按键:按下0,松开1;
|
||||||
|
|
||||||
|
引脚:
|
||||||
|
HALL1 --> PB2 (光感3)
|
||||||
|
HALL2 --> PB3 (光感2)
|
||||||
|
HALL3 --> PB4 (光感1)
|
||||||
|
ENDSTOP_3 --> PB7(耗材开关)
|
||||||
|
KEY1 --> PB13(后退)
|
||||||
|
KEY2 --> PB12(前进)
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
***************************************************************************************
|
||||||
|
* 版权声明 COPYRIGHT 2025 xxx@126.com
|
||||||
|
***************************************************************************************
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
#include "buffer.h"
|
||||||
|
TMC2209Stepper driver(UART, UART, R_SENSE, DRIVER_ADDRESS);
|
||||||
|
Buffer buffer={0};//存储个传感器状态
|
||||||
|
Motor_State motor_state=Stop;
|
||||||
|
|
||||||
|
bool is_front=false;//前进标志位
|
||||||
|
uint32_t front_time=0;//前进时间
|
||||||
|
const int EEPROM_ADDR_TIMEOUT = 0;
|
||||||
|
const uint32_t DEFAULT_TIMEOUT = 30000;
|
||||||
|
uint32_t timeout=30000;//超时时间,单位:ms;
|
||||||
|
bool is_error=false;//错误标志位,如果连续30s推送耗材没停过,则认为错误
|
||||||
|
String serial_buf;
|
||||||
|
|
||||||
|
static HardwareTimer timer(TIM6);//超时出错
|
||||||
|
|
||||||
|
void buffer_init(){
|
||||||
|
buffer_sensor_init();
|
||||||
|
buffer_motor_init();
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
EEPROM.get(EEPROM_ADDR_TIMEOUT, timeout);
|
||||||
|
// 判断读取的值是否有效(例如首次写入前是 0xFFFFFFFF 或 0)
|
||||||
|
if (timeout == 0xFFFFFFFF || timeout == 0) {
|
||||||
|
timeout = DEFAULT_TIMEOUT;
|
||||||
|
EEPROM.put(EEPROM_ADDR_TIMEOUT, timeout);
|
||||||
|
Serial.println("EEPROM is empty");
|
||||||
|
} else {
|
||||||
|
Serial.print("read timeout: ");
|
||||||
|
Serial.println(timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
timer.pause();
|
||||||
|
timer.setPrescaleFactor(48);//48分频 48000000/48=1000000
|
||||||
|
timer.setOverflow(1000);//1ms
|
||||||
|
timer.attachInterrupt(&timer_it_callback);
|
||||||
|
timer.resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
void buffer_loop(){
|
||||||
|
|
||||||
|
uint32_t lastToggleTime = millis(); // 记录上次切换的时间
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
if(millis() - lastToggleTime >= 500) // 每隔 500ms
|
||||||
|
{
|
||||||
|
lastToggleTime = millis(); // 记录当前时间
|
||||||
|
digitalToggle(ERR_LED);
|
||||||
|
}
|
||||||
|
//1、读取各传感器的值
|
||||||
|
read_sensor_state();
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
buffer_debug();
|
||||||
|
while(Serial.available()>0){
|
||||||
|
char c=Serial.read();
|
||||||
|
serial_buf+=c;
|
||||||
|
int pos_enter = -1;
|
||||||
|
pos_enter = serial_buf.indexOf("\n");
|
||||||
|
if(pos_enter != -1){
|
||||||
|
String str=serial_buf.substring(0,pos_enter);
|
||||||
|
serial_buf=serial_buf.substring(pos_enter+1);
|
||||||
|
if(strstr(str.c_str(),"gconf")!=NULL){
|
||||||
|
TMC2208_n::CHOPCONF_t gconf{0};
|
||||||
|
|
||||||
|
// 提取 "gconf" 后面的十六进制字符串
|
||||||
|
int pos = str.indexOf("gconf");
|
||||||
|
if (pos != -1) {
|
||||||
|
String hexPart = str.substring(pos + 5); // 跳过 "gconf"
|
||||||
|
hexPart.trim(); // 去除前后空白符
|
||||||
|
|
||||||
|
// 将字符串转换为 32 位无符号整数
|
||||||
|
uint32_t hexValue = strtoul(hexPart.c_str(), NULL, 16);
|
||||||
|
|
||||||
|
// 赋值给结构体(按你的结构定义赋值)
|
||||||
|
gconf.sr = hexValue; // 假设 sr 是结构体中的原始寄存器值字段
|
||||||
|
}
|
||||||
|
driver.GCONF(gconf.sr);
|
||||||
|
Serial.print("write GCONF:0x");
|
||||||
|
Serial.println(gconf.sr,HEX);
|
||||||
|
Serial.print("read GCONF: 0x");
|
||||||
|
Serial.println(driver.GCONF(),HEX);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
motor_control();
|
||||||
|
|
||||||
|
while(Serial.available()>0){
|
||||||
|
char c=Serial.read();
|
||||||
|
serial_buf+=c;
|
||||||
|
}
|
||||||
|
if(serial_buf.length()>0){
|
||||||
|
|
||||||
|
if(serial_buf=="rt"){
|
||||||
|
Serial.print("read timeout=");
|
||||||
|
Serial.println(timeout);
|
||||||
|
serial_buf="";
|
||||||
|
}
|
||||||
|
else if(serial_buf.startsWith("set")){
|
||||||
|
serial_buf.remove(0,3);
|
||||||
|
int64_t num=serial_buf.toInt();
|
||||||
|
if(num<0||num>0xffffffff){
|
||||||
|
serial_buf="";
|
||||||
|
Serial.println("Error: Invalid timeout value.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
timeout=num;
|
||||||
|
EEPROM.put(EEPROM_ADDR_TIMEOUT, timeout);
|
||||||
|
serial_buf="";
|
||||||
|
Serial.print("set succeed! timeout=");
|
||||||
|
Serial.println(timeout);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Serial.println(serial_buf.c_str());
|
||||||
|
Serial.println("command error!");
|
||||||
|
serial_buf="";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void buffer_sensor_init(){
|
||||||
|
//传感器初始化
|
||||||
|
pinMode(HALL1,INPUT);
|
||||||
|
pinMode(HALL2,INPUT);
|
||||||
|
pinMode(HALL3,INPUT);
|
||||||
|
pinMode(ENDSTOP_3,INPUT);
|
||||||
|
pinMode(KEY1,INPUT);
|
||||||
|
pinMode(KEY2,INPUT);
|
||||||
|
|
||||||
|
//耗材指示灯初始化
|
||||||
|
pinMode(DUANLIAO,OUTPUT);
|
||||||
|
pinMode(ERR_LED,OUTPUT);
|
||||||
|
pinMode(START_LED,OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void buffer_motor_init(){
|
||||||
|
//电机驱动引脚初始化
|
||||||
|
pinMode(EN_PIN, OUTPUT);
|
||||||
|
pinMode(STEP_PIN, OUTPUT);
|
||||||
|
pinMode(DIR_PIN, OUTPUT);
|
||||||
|
digitalWrite(EN_PIN, LOW); // Enable driver in hardware
|
||||||
|
|
||||||
|
//电机驱动初始化
|
||||||
|
driver.begin(); // UART: Init SW UART (if selected) with default 115200 baudrate
|
||||||
|
driver.beginSerial(9600);
|
||||||
|
driver.I_scale_analog(false);
|
||||||
|
driver.toff(5); // Enables driver in software
|
||||||
|
driver.rms_current(I_CURRENT); // Set motor RMS current
|
||||||
|
driver.microsteps(Move_Divide_NUM); // Set microsteps to 1/16th
|
||||||
|
driver.VACTUAL(STOP); // Set velocity
|
||||||
|
driver.en_spreadCycle(true);
|
||||||
|
driver.pwm_autoscale(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 读取各传感器状态
|
||||||
|
* @param NULL
|
||||||
|
* @retval NULL
|
||||||
|
**/
|
||||||
|
void read_sensor_state(void)
|
||||||
|
{
|
||||||
|
buffer.buffer1_pos1_sensor_state= digitalRead(HALL3);
|
||||||
|
buffer.buffer1_pos2_sensor_state= digitalRead(HALL2);
|
||||||
|
buffer.buffer1_pos3_sensor_state= digitalRead(HALL1);
|
||||||
|
buffer.buffer1_material_swtich_state=digitalRead(ENDSTOP_3);
|
||||||
|
buffer.key1=digitalRead(KEY1);
|
||||||
|
buffer.key2=digitalRead(KEY2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 电机控制
|
||||||
|
* @param NULL
|
||||||
|
* @retval NULL
|
||||||
|
**/
|
||||||
|
void motor_control(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
static Motor_State last_motor_state=Stop;
|
||||||
|
|
||||||
|
//按键控制电机
|
||||||
|
//按键1按下
|
||||||
|
if(!digitalRead(KEY1))
|
||||||
|
{
|
||||||
|
WRITE_EN_PIN(0);//使能
|
||||||
|
driver.VACTUAL(STOP); //停止
|
||||||
|
|
||||||
|
driver.shaft(BACK);
|
||||||
|
driver.VACTUAL(VACTRUAL_VALUE);
|
||||||
|
while(!digitalRead(KEY1));//等待松手
|
||||||
|
|
||||||
|
|
||||||
|
driver.VACTUAL(STOP); //停止
|
||||||
|
motor_state=Stop;
|
||||||
|
|
||||||
|
is_front=false;
|
||||||
|
front_time=0;
|
||||||
|
is_error=false;
|
||||||
|
WRITE_EN_PIN(1);//失能
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(!digitalRead(KEY2))//按键2按下
|
||||||
|
{
|
||||||
|
WRITE_EN_PIN(0);
|
||||||
|
driver.VACTUAL(STOP); //停止
|
||||||
|
|
||||||
|
driver.shaft(FORWARD);
|
||||||
|
driver.VACTUAL(VACTRUAL_VALUE);
|
||||||
|
while(!digitalRead(KEY2));
|
||||||
|
|
||||||
|
|
||||||
|
driver.VACTUAL(STOP); //停止
|
||||||
|
motor_state=Stop;
|
||||||
|
|
||||||
|
is_front=false;
|
||||||
|
front_time=0;
|
||||||
|
is_error=false;
|
||||||
|
WRITE_EN_PIN(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断耗材
|
||||||
|
if(digitalRead(ENDSTOP_3))
|
||||||
|
{
|
||||||
|
//无耗材,停止电机
|
||||||
|
driver.VACTUAL(STOP); //停止
|
||||||
|
motor_state=Stop;
|
||||||
|
|
||||||
|
//断料引脚输出低电平
|
||||||
|
digitalWrite(DUANLIAO,0);
|
||||||
|
|
||||||
|
//关闭指示灯
|
||||||
|
digitalWrite(START_LED,0);
|
||||||
|
|
||||||
|
is_front=false;
|
||||||
|
front_time=0;
|
||||||
|
is_error=false;
|
||||||
|
WRITE_EN_PIN(1);
|
||||||
|
|
||||||
|
|
||||||
|
return;//无耗材,结束
|
||||||
|
}
|
||||||
|
|
||||||
|
//有耗材,断料引脚输出高电平
|
||||||
|
digitalWrite(DUANLIAO,1);
|
||||||
|
|
||||||
|
//开启指示灯
|
||||||
|
digitalWrite(START_LED,1);
|
||||||
|
|
||||||
|
//判断是否有错误
|
||||||
|
if(is_error){
|
||||||
|
//停止电机
|
||||||
|
driver.VACTUAL(STOP); //停止
|
||||||
|
motor_state=Stop;
|
||||||
|
WRITE_EN_PIN(1);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//缓冲器位置记录
|
||||||
|
if(buffer.buffer1_pos1_sensor_state) //缓冲器位置为1,耗材往前推
|
||||||
|
{
|
||||||
|
last_motor_state=motor_state; //记录上一次状态
|
||||||
|
motor_state=Forward;
|
||||||
|
is_front=true;
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(buffer.buffer1_pos2_sensor_state) //缓冲器位置为2,电机停止转动
|
||||||
|
{
|
||||||
|
last_motor_state=motor_state; //记录上一次状态
|
||||||
|
motor_state=Stop;
|
||||||
|
is_front=false;
|
||||||
|
front_time=0;
|
||||||
|
}
|
||||||
|
else if(buffer.buffer1_pos3_sensor_state) //缓冲器位置为3,回退耗材
|
||||||
|
{
|
||||||
|
last_motor_state=motor_state; //记录上一次状态
|
||||||
|
motor_state=Back;
|
||||||
|
is_front=false;
|
||||||
|
front_time=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(motor_state==last_motor_state)//如果上次状态跟这次状态一致,则不需要再次发送控制命令,结束此次函数
|
||||||
|
return;
|
||||||
|
|
||||||
|
//电机控制
|
||||||
|
switch(motor_state)
|
||||||
|
{
|
||||||
|
case Forward://向前
|
||||||
|
{
|
||||||
|
WRITE_EN_PIN(0);
|
||||||
|
if(last_motor_state==Back) driver.VACTUAL(STOP);//上次是后退,先停下再前进
|
||||||
|
driver.shaft(FORWARD);
|
||||||
|
driver.VACTUAL(VACTRUAL_VALUE);
|
||||||
|
|
||||||
|
}break;
|
||||||
|
case Stop://停止
|
||||||
|
{
|
||||||
|
WRITE_EN_PIN(1);
|
||||||
|
driver.VACTUAL(STOP);
|
||||||
|
|
||||||
|
}break;
|
||||||
|
case Back://向后
|
||||||
|
{
|
||||||
|
WRITE_EN_PIN(0);
|
||||||
|
if(last_motor_state==Forward) driver.VACTUAL(STOP);;//上次是前进,先停下再后退
|
||||||
|
driver.shaft(BACK);
|
||||||
|
driver.VACTUAL(VACTRUAL_VALUE);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void timer_it_callback(){
|
||||||
|
if(is_front){//如果往前推
|
||||||
|
front_time++;
|
||||||
|
if(front_time>timeout){//如果超时
|
||||||
|
is_error=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void buffer_debug(void){
|
||||||
|
// Serial.print("buffer1_pos1_sensor_state:");Serial.println(buffer.buffer1_pos1_sensor_state);
|
||||||
|
// Serial.print("buffer1_pos2_sensor_state:");Serial.println(buffer.buffer1_pos2_sensor_state);
|
||||||
|
// Serial.print("buffer1_pos3_sensor_state:");Serial.println(buffer.buffer1_pos3_sensor_state);
|
||||||
|
// Serial.print("buffer1_material_swtich_state:");Serial.println(buffer.buffer1_material_swtich_state);
|
||||||
|
// Serial.print("key1:");Serial.println(buffer.key1);
|
||||||
|
// Serial.print("key2:");Serial.println(buffer.key2);
|
||||||
|
static int i=0;
|
||||||
|
if(i<0x1ff){
|
||||||
|
Serial.print("i:");
|
||||||
|
Serial.println(i);
|
||||||
|
driver.GCONF(i);
|
||||||
|
driver.PWMCONF(i);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
uint32_t gconf = driver.GCONF();
|
||||||
|
uint32_t chopconf=driver.CHOPCONF();
|
||||||
|
uint32_t pwmconf = driver.PWMCONF();
|
||||||
|
if(driver.CRCerror){
|
||||||
|
Serial.println("CRCerror");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Serial.print("GCONF():0x");
|
||||||
|
Serial.println(gconf,HEX);
|
||||||
|
Serial.print("CHOPCONF():0x");
|
||||||
|
char buf[11]; // "0x" + 8 digits + null terminator
|
||||||
|
sprintf(buf, "%08lX", chopconf); // %08lX -> 8位大写十六进制(long unsigned)
|
||||||
|
Serial.println(buf);
|
||||||
|
Serial.print("PWMCONF():0x");
|
||||||
|
sprintf(buf, "%08lX", pwmconf); // %08lX -> 8位大写十六进制(long unsigned)
|
||||||
|
Serial.println(buf);
|
||||||
|
Serial.println("");
|
||||||
|
}
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
106
lib/buffer/buffer.h
Normal file
106
lib/buffer/buffer.h
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
/**
|
||||||
|
***************************************************************************************
|
||||||
|
* @file buffer.cpp
|
||||||
|
* @author lijihu
|
||||||
|
* @version V1.0.0
|
||||||
|
* @date 2025/05/10
|
||||||
|
* @brief 实现缓冲器功能
|
||||||
|
*缓冲器说明
|
||||||
|
光感:遮挡1,不遮挡0;
|
||||||
|
耗材开关:有耗材0,无耗材1;
|
||||||
|
按键:按下0,松开1;
|
||||||
|
|
||||||
|
引脚:
|
||||||
|
HALL1 --> PB2 (光感3)
|
||||||
|
HALL2 --> PB3 (光感2)
|
||||||
|
HALL3 --> PB4 (光感1)
|
||||||
|
ENDSTOP_3 --> PB7(耗材开关)
|
||||||
|
KEY1 --> PB13(后退)
|
||||||
|
KEY2 --> PB12(前进)
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
***************************************************************************************
|
||||||
|
* 版权声明 COPYRIGHT 2024 xxx@126.com
|
||||||
|
***************************************************************************************
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __BUFFER_H__
|
||||||
|
#define __BUFFER_H__
|
||||||
|
|
||||||
|
#include <TMCStepper.h>
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <EEPROM.h>
|
||||||
|
|
||||||
|
#define HALL1 PB2 //光感3
|
||||||
|
#define HALL2 PB3 //光感2
|
||||||
|
#define HALL3 PB4 //光感1
|
||||||
|
|
||||||
|
#define ENDSTOP_3 PB7 //耗材开关
|
||||||
|
|
||||||
|
#define KEY1 PB13 //后退
|
||||||
|
#define KEY2 PB12 //前进
|
||||||
|
|
||||||
|
#define EN_PIN PA6 //使能
|
||||||
|
#define DIR_PIN PA7 //方向
|
||||||
|
#define STEP_PIN PC13 //步
|
||||||
|
#define UART PB1 //软串口
|
||||||
|
|
||||||
|
#define DUANLIAO PB15 //断料
|
||||||
|
#define ERR_LED PA15 //指示灯
|
||||||
|
#define START_LED PA8 //指示灯
|
||||||
|
|
||||||
|
#define DRIVER_ADDRESS 0b00 // TMC Driver address according to MS1 and MS2
|
||||||
|
#define R_SENSE 0.11f // Match to your driver
|
||||||
|
|
||||||
|
#define SPEED 300 //转速(单位:r/min)
|
||||||
|
#define Move_Divide_NUM ((int32_t)(64)) //(每步柔性件控制细分量)
|
||||||
|
#define VACTRUAL_VALUE (uint32_t)(SPEED*Move_Divide_NUM*200/60/0.715) //VACTUAL寄存器值
|
||||||
|
|
||||||
|
#define STOP 0 //停止
|
||||||
|
#define I_CURRENT (600) //电流
|
||||||
|
#define WRITE_EN_PIN(x) digitalWrite(EN_PIN,x)//使能EN引脚
|
||||||
|
#define FORWARD 1//耗材方向
|
||||||
|
#define BACK 0
|
||||||
|
|
||||||
|
#define DEBUG 0
|
||||||
|
|
||||||
|
//定义结构体存储缓冲器中各传感器的的状态
|
||||||
|
typedef struct Buffer
|
||||||
|
{
|
||||||
|
//buffer1
|
||||||
|
bool buffer1_pos1_sensor_state;
|
||||||
|
bool buffer1_pos2_sensor_state;
|
||||||
|
bool buffer1_pos3_sensor_state;
|
||||||
|
bool buffer1_material_swtich_state;
|
||||||
|
bool key1;
|
||||||
|
bool key2;
|
||||||
|
|
||||||
|
}Buffer;
|
||||||
|
|
||||||
|
//电机状态控制枚举
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
Forward=0,//向前
|
||||||
|
Stop, //停止
|
||||||
|
Back //后退
|
||||||
|
}Motor_State;
|
||||||
|
|
||||||
|
extern void buffer_sensor_init();
|
||||||
|
extern void buffer_motor_init();
|
||||||
|
|
||||||
|
extern void read_sensor_state(void);
|
||||||
|
extern void motor_control(void);
|
||||||
|
|
||||||
|
extern void buffer_init();
|
||||||
|
extern void buffer_loop(void);
|
||||||
|
extern void timer_it_callback();
|
||||||
|
extern void buffer_debug(void);
|
||||||
|
|
||||||
|
extern bool is_error;
|
||||||
|
extern uint32_t front_time;//前进时间
|
||||||
|
extern uint32_t timeout;
|
||||||
|
extern bool is_front;
|
||||||
|
extern TMC2209Stepper driver;
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
24
platformio.ini
Normal file
24
platformio.ini
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
; PlatformIO Project Configuration File
|
||||||
|
;
|
||||||
|
; Build options: build flags, source filter
|
||||||
|
; Upload options: custom upload port, speed and extra flags
|
||||||
|
; Library options: dependencies, extra library storages
|
||||||
|
; Advanced options: extra scripting
|
||||||
|
;
|
||||||
|
; Please visit documentation for the other options and examples
|
||||||
|
; https://docs.platformio.org/page/projectconf.html
|
||||||
|
|
||||||
|
[env:fly_buffer_f072c8]
|
||||||
|
platform = ststm32
|
||||||
|
board = fly_buffer_f072c8
|
||||||
|
framework = arduino
|
||||||
|
upload_protocol = dfu
|
||||||
|
lib_deps =
|
||||||
|
TMCStepper
|
||||||
|
build_flags =
|
||||||
|
-D USBCON
|
||||||
|
-D USBD_USE_CDC
|
||||||
|
-D HSE_VALUE=8000000L
|
||||||
|
-D USE_HSE
|
||||||
|
board_build.variants_dir = variants
|
||||||
|
board_build.board_dir = boards
|
||||||
16
src/main.cpp
Normal file
16
src/main.cpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include "buffer.h"
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.dtr(false);
|
||||||
|
buffer_init();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
buffer_loop();
|
||||||
|
// Serial.println("loop() is running");
|
||||||
|
// delay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
11
test/README
Normal file
11
test/README
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
This directory is intended for PlatformIO Test Runner and project tests.
|
||||||
|
|
||||||
|
Unit Testing is a software testing method by which individual units of
|
||||||
|
source code, sets of one or more MCU program modules together with associated
|
||||||
|
control data, usage procedures, and operating procedures, are tested to
|
||||||
|
determine whether they are fit for use. Unit testing finds problems early
|
||||||
|
in the development cycle.
|
||||||
|
|
||||||
|
More information about PlatformIO Unit Testing:
|
||||||
|
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
|
||||||
250
variants/F072C8/PeripheralPins_FLY_BUFFER_F072C.c
Normal file
250
variants/F072C8/PeripheralPins_FLY_BUFFER_F072C.c
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
/*
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (c) 2021, STMicroelectronics
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
* the "License"; You may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at:
|
||||||
|
* opensource.org/licenses/BSD-3-Clause
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Automatically generated from STM32F072C(8-B)Ux.xml
|
||||||
|
* CubeMX DB release 6.0.10
|
||||||
|
*/
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include "PeripheralPins.h"
|
||||||
|
|
||||||
|
/* =====
|
||||||
|
* Notes:
|
||||||
|
* - The pins mentioned Px_y_ALTz are alternative possibilities which use other
|
||||||
|
* HW peripheral instances. You can use them the same way as any other "normal"
|
||||||
|
* pin (i.e. analogWrite(PA7_ALT1, 128);).
|
||||||
|
*
|
||||||
|
* - Commented lines are alternative possibilities which are not used per default.
|
||||||
|
* If you change them, you will have to know what you do
|
||||||
|
* =====
|
||||||
|
*/
|
||||||
|
|
||||||
|
//*** ADC ***
|
||||||
|
|
||||||
|
#ifdef HAL_ADC_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_ADC[] = {
|
||||||
|
{PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC_IN0
|
||||||
|
{PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC_IN1
|
||||||
|
{PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC_IN2
|
||||||
|
{PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC_IN3
|
||||||
|
{PA_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC_IN4
|
||||||
|
{PA_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC_IN5
|
||||||
|
{PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC_IN6
|
||||||
|
{PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC_IN7
|
||||||
|
{PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC_IN8
|
||||||
|
{PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC_IN9
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** DAC ***
|
||||||
|
|
||||||
|
#ifdef HAL_DAC_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_DAC[] = {
|
||||||
|
{PA_4, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
|
||||||
|
{PA_5, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** I2C ***
|
||||||
|
|
||||||
|
#ifdef HAL_I2C_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_I2C_SDA[] = {
|
||||||
|
{PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF1_I2C1)},
|
||||||
|
{PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF1_I2C1)},
|
||||||
|
{PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF1_I2C2)},
|
||||||
|
{PB_14, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF5_I2C2)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_I2C_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_I2C_SCL[] = {
|
||||||
|
{PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF1_I2C1)},
|
||||||
|
{PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF1_I2C1)},
|
||||||
|
{PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF1_I2C2)},
|
||||||
|
{PB_13, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF5_I2C2)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** TIM ***
|
||||||
|
|
||||||
|
#ifdef HAL_TIM_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_TIM[] = {
|
||||||
|
{PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
|
{PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 2, 0)}, // TIM2_CH2
|
||||||
|
{PA_1_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
|
{PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
|
{PA_2_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
|
{PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
|
{PA_3_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
|
{PA_4, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM14, 1, 0)}, // TIM14_CH1
|
||||||
|
{PA_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
|
{PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
|
{PA_6_ALT1, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
|
{PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
|
{PA_7_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
|
{PA_7_ALT2, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM14, 1, 0)}, // TIM14_CH1
|
||||||
|
{PA_7_ALT3, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
|
{PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
|
{PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
|
{PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
|
{PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
|
{PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
|
{PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
|
{PB_0_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
|
{PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
{PB_1_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
|
{PB_1_ALT2, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM14, 1, 0)}, // TIM14_CH1
|
||||||
|
{PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 2, 0)}, // TIM2_CH2
|
||||||
|
{PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
|
{PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
|
{PB_6, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
|
{PB_7, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM17, 1, 1)}, // TIM17_CH1N
|
||||||
|
{PB_8, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
|
{PB_9, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
|
{PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
|
{PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
|
{PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
|
{PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
|
{PB_14_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
|
{PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
{PB_15_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
|
{PB_15_ALT2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** UART ***
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_UART_TX[] = {
|
||||||
|
{PA_0, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
|
||||||
|
{PA_2, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
|
||||||
|
{PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
|
||||||
|
{PA_14, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
|
||||||
|
{PB_6, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART1)},
|
||||||
|
{PB_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_UART_RX[] = {
|
||||||
|
{PA_1, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
|
||||||
|
{PA_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
|
||||||
|
{PA_10, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
|
||||||
|
{PA_15, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
|
||||||
|
{PB_7, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART1)},
|
||||||
|
{PB_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_UART_RTS[] = {
|
||||||
|
{PA_1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
|
||||||
|
{PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
|
||||||
|
{PA_15, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
|
||||||
|
{PB_1, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
|
||||||
|
{PB_14, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_UART_CTS[] = {
|
||||||
|
{PA_0, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
|
||||||
|
{PA_6, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
|
||||||
|
{PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
|
||||||
|
{PB_7, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
|
||||||
|
{PB_13, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** SPI ***
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_SPI_MOSI[] = {
|
||||||
|
{PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_SPI_MISO[] = {
|
||||||
|
{PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_SPI_SCLK[] = {
|
||||||
|
{PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
|
||||||
|
{PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
WEAK const PinMap PinMap_SPI_SSEL[] = {
|
||||||
|
{PA_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
|
||||||
|
{PB_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
|
||||||
|
{PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** CAN ***
|
||||||
|
|
||||||
|
#if defined(HAL_CAN_MODULE_ENABLED) || defined(HAL_CAN_LEGACY_MODULE_ENABLED)
|
||||||
|
WEAK const PinMap PinMap_CAN_RD[] = {
|
||||||
|
{PA_11, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)},
|
||||||
|
{PB_8, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAL_CAN_MODULE_ENABLED) || defined(HAL_CAN_LEGACY_MODULE_ENABLED)
|
||||||
|
WEAK const PinMap PinMap_CAN_TD[] = {
|
||||||
|
{PA_12, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)},
|
||||||
|
{PB_9, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)},
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** No ETHERNET ***
|
||||||
|
|
||||||
|
//*** No QUADSPI ***
|
||||||
|
|
||||||
|
//*** USB ***
|
||||||
|
|
||||||
|
#if defined(HAL_PCD_MODULE_ENABLED) || defined(HAL_HCD_MODULE_ENABLED)
|
||||||
|
WEAK const PinMap PinMap_USB[] = {
|
||||||
|
{PA_11, USB, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_DM
|
||||||
|
{PA_12, USB, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_DP
|
||||||
|
// {PA_13, USB, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_USB)}, // USB_NOE
|
||||||
|
{NC, NP, 0}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*** No SD ***
|
||||||
47
variants/F072C8/PinNamesVar.h
Normal file
47
variants/F072C8/PinNamesVar.h
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/* Alternate pin name */
|
||||||
|
PA_1_ALT1 = PA_1 | ALT1,
|
||||||
|
PA_2_ALT1 = PA_2 | ALT1,
|
||||||
|
PA_3_ALT1 = PA_3 | ALT1,
|
||||||
|
PA_6_ALT1 = PA_6 | ALT1,
|
||||||
|
PA_7_ALT1 = PA_7 | ALT1,
|
||||||
|
PA_7_ALT2 = PA_7 | ALT2,
|
||||||
|
PA_7_ALT3 = PA_7 | ALT3,
|
||||||
|
PB_0_ALT1 = PB_0 | ALT1,
|
||||||
|
PB_1_ALT1 = PB_1 | ALT1,
|
||||||
|
PB_1_ALT2 = PB_1 | ALT2,
|
||||||
|
PB_14_ALT1 = PB_14 | ALT1,
|
||||||
|
PB_15_ALT1 = PB_15 | ALT1,
|
||||||
|
PB_15_ALT2 = PB_15 | ALT2,
|
||||||
|
|
||||||
|
/* SYS_WKUP */
|
||||||
|
#ifdef PWR_WAKEUP_PIN1
|
||||||
|
SYS_WKUP1 = PA_0,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN2
|
||||||
|
SYS_WKUP2 = PC_13,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN3
|
||||||
|
SYS_WKUP3 = NC,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN4
|
||||||
|
SYS_WKUP4 = PA_2,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN5
|
||||||
|
SYS_WKUP5 = NC,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN6
|
||||||
|
SYS_WKUP6 = PB_5,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN7
|
||||||
|
SYS_WKUP7 = PB_15,
|
||||||
|
#endif
|
||||||
|
#ifdef PWR_WAKEUP_PIN8
|
||||||
|
SYS_WKUP8 = NC,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
#ifdef USBCON
|
||||||
|
USB_DM = PA_11,
|
||||||
|
USB_DP = PA_12,
|
||||||
|
USB_NOE = PA_13,
|
||||||
|
#endif
|
||||||
50
variants/F072C8/boards_entry.txt
Normal file
50
variants/F072C8/boards_entry.txt
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# This file help to add generic board entry.
|
||||||
|
# upload.maximum_size and product_line have to be verified
|
||||||
|
# and changed if needed.
|
||||||
|
# See: https://github.com/stm32duino/Arduino_Core_STM32/wiki/Add-a-new-variant-%28board%29
|
||||||
|
|
||||||
|
# Generic F072C8Tx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX=Generic F072C8Tx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX.upload.maximum_size=65536
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX.upload.maximum_data_size=16384
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX.build.board=GENERIC_F072C8TX
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX.build.product_line=STM32F072xB
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX.build.variant=STM32F0xx/F072C8(T-U)_F072CB(T-U-Y)
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8TX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F0xx/STM32F0x2.svd
|
||||||
|
|
||||||
|
# Generic F072CBTx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX=Generic F072CBTx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX.upload.maximum_size=131072
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX.upload.maximum_data_size=16384
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX.build.board=GENERIC_F072CBTX
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX.build.product_line=STM32F072xB
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX.build.variant=STM32F0xx/F072C8(T-U)_F072CB(T-U-Y)
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBTX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F0xx/STM32F0x2.svd
|
||||||
|
|
||||||
|
# Generic F072C8Ux
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX=Generic F072C8Ux
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX.upload.maximum_size=65536
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX.upload.maximum_data_size=16384
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX.build.board=GENERIC_F072C8UX
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX.build.product_line=STM32F072xB
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX.build.variant=STM32F0xx/F072C8(T-U)_F072CB(T-U-Y)
|
||||||
|
GenF0.menu.pnum.GENERIC_F072C8UX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F0xx/STM32F0x2.svd
|
||||||
|
|
||||||
|
# Generic F072CBUx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX=Generic F072CBUx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX.upload.maximum_size=131072
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX.upload.maximum_data_size=16384
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX.build.board=GENERIC_F072CBUX
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX.build.product_line=STM32F072xB
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX.build.variant=STM32F0xx/F072C8(T-U)_F072CB(T-U-Y)
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBUX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F0xx/STM32F0x2.svd
|
||||||
|
|
||||||
|
# Generic F072CBYx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX=Generic F072CBYx
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX.upload.maximum_size=131072
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX.upload.maximum_data_size=16384
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX.build.board=GENERIC_F072CBYX
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX.build.product_line=STM32F072xB
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX.build.variant=STM32F0xx/F072C8(T-U)_F072CB(T-U-Y)
|
||||||
|
GenF0.menu.pnum.GENERIC_F072CBYX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F0xx/STM32F0x2.svd
|
||||||
|
|
||||||
177
variants/F072C8/ldscript.ld
Normal file
177
variants/F072C8/ldscript.ld
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file LinkerScript.ld
|
||||||
|
* @author Auto-generated by STM32CubeIDE
|
||||||
|
* @brief Linker script for STM32F072CBTx Device from STM32F0 series
|
||||||
|
* 128Kbytes FLASH
|
||||||
|
* 16Kbytes RAM
|
||||||
|
*
|
||||||
|
* Set heap size, stack size and stack location according
|
||||||
|
* to application requirements.
|
||||||
|
*
|
||||||
|
* Set memory bank area and size if external memory is used
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2020 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
* the "License"; You may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at:
|
||||||
|
* opensource.org/licenses/BSD-3-Clause
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Entry Point */
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
|
/* Highest address of the user mode stack */
|
||||||
|
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
|
||||||
|
|
||||||
|
_Min_Heap_Size = 0x200; /* required amount of heap */
|
||||||
|
_Min_Stack_Size = 0x400; /* required amount of stack */
|
||||||
|
|
||||||
|
/* Memories definition */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE
|
||||||
|
FLASH (rx) : ORIGIN = 0x8000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sections */
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* The startup code into "FLASH" Rom type memory */
|
||||||
|
.isr_vector :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.isr_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* The program code and other data into "FLASH" Rom type memory */
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* .text sections (code) */
|
||||||
|
*(.text*) /* .text* sections (code) */
|
||||||
|
*(.glue_7) /* glue arm to thumb code */
|
||||||
|
*(.glue_7t) /* glue thumb to arm code */
|
||||||
|
*(.eh_frame)
|
||||||
|
|
||||||
|
KEEP (*(.init))
|
||||||
|
KEEP (*(.fini))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .; /* define a global symbols at end of code */
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* Constant data into "FLASH" Rom type memory */
|
||||||
|
.rodata :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||||
|
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.ARM.extab (READONLY) : {
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.ARM (READONLY) : {
|
||||||
|
. = ALIGN(4);
|
||||||
|
__exidx_start = .;
|
||||||
|
*(.ARM.exidx*)
|
||||||
|
__exidx_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.preinit_array (READONLY) :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array*))
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.init_array (READONLY) :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
PROVIDE_HIDDEN (__init_array_start = .);
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array*))
|
||||||
|
PROVIDE_HIDDEN (__init_array_end = .);
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.fini_array (READONLY) :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||||
|
KEEP (*(SORT(.fini_array.*)))
|
||||||
|
KEEP (*(.fini_array*))
|
||||||
|
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* Used by the startup to initialize data */
|
||||||
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
|
/* Initialized data sections into "RAM" Ram type memory */
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
_sdata = .; /* create a global symbol at data start */
|
||||||
|
*(.data) /* .data sections */
|
||||||
|
*(.data*) /* .data* sections */
|
||||||
|
*(.RamFunc) /* .RamFunc sections */
|
||||||
|
*(.RamFunc*) /* .RamFunc* sections */
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_edata = .; /* define a global symbol at data end */
|
||||||
|
|
||||||
|
} >RAM AT> FLASH
|
||||||
|
|
||||||
|
/* Uninitialized data section into "RAM" Ram type memory */
|
||||||
|
. = ALIGN(4);
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
/* This is used by the startup in order to initialize the .bss section */
|
||||||
|
_sbss = .; /* define a global symbol at bss start */
|
||||||
|
__bss_start__ = _sbss;
|
||||||
|
*(.bss)
|
||||||
|
*(.bss*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_ebss = .; /* define a global symbol at bss end */
|
||||||
|
__bss_end__ = _ebss;
|
||||||
|
} >RAM
|
||||||
|
|
||||||
|
/* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
|
||||||
|
._user_heap_stack :
|
||||||
|
{
|
||||||
|
. = ALIGN(8);
|
||||||
|
PROVIDE ( end = . );
|
||||||
|
PROVIDE ( _end = . );
|
||||||
|
. = . + _Min_Heap_Size;
|
||||||
|
. = . + _Min_Stack_Size;
|
||||||
|
. = ALIGN(8);
|
||||||
|
} >RAM
|
||||||
|
|
||||||
|
/* Remove information from the compiler libraries */
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
libc.a ( * )
|
||||||
|
libm.a ( * )
|
||||||
|
libgcc.a ( * )
|
||||||
|
}
|
||||||
|
|
||||||
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||||
|
}
|
||||||
114
variants/F072C8/variant_FLY_BUFFER_F072C.cpp
Normal file
114
variants/F072C8/variant_FLY_BUFFER_F072C.cpp
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
|
||||||
|
#include "pins_arduino.h"
|
||||||
|
|
||||||
|
// Pin name
|
||||||
|
const PinName digitalPin[] = {
|
||||||
|
PA_8,
|
||||||
|
PA_9,
|
||||||
|
PA_10,
|
||||||
|
PA_11,
|
||||||
|
PA_12,
|
||||||
|
PA_13,
|
||||||
|
PA_14,
|
||||||
|
PA_15,
|
||||||
|
PB_2,
|
||||||
|
PB_3,
|
||||||
|
PB_4,
|
||||||
|
PB_5,
|
||||||
|
PB_6,
|
||||||
|
PB_7,
|
||||||
|
PB_8,
|
||||||
|
PB_9,
|
||||||
|
PB_10,
|
||||||
|
PB_11,
|
||||||
|
PB_12,
|
||||||
|
PB_13,
|
||||||
|
PB_14,
|
||||||
|
PB_15,
|
||||||
|
PC_13,
|
||||||
|
PC_14,
|
||||||
|
PC_15,
|
||||||
|
PA_0,
|
||||||
|
PA_1,
|
||||||
|
PA_2,
|
||||||
|
PA_3,
|
||||||
|
PA_4,
|
||||||
|
PA_5,
|
||||||
|
PA_6,
|
||||||
|
PA_7,
|
||||||
|
PB_0,
|
||||||
|
PB_1,
|
||||||
|
PF_0,
|
||||||
|
PF_1
|
||||||
|
};
|
||||||
|
|
||||||
|
// Analog (Ax) pin number array
|
||||||
|
const uint32_t analogInputPin[] = {
|
||||||
|
25, // A0
|
||||||
|
26, // A1
|
||||||
|
27, // A2
|
||||||
|
28, // A3
|
||||||
|
29, // A4
|
||||||
|
30, // A5
|
||||||
|
31, // A6
|
||||||
|
32, // A7
|
||||||
|
33, // A8
|
||||||
|
34 // A9
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
|
||||||
|
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
133
variants/F072C8/variant_FLY_BUFFER_F072Cx.h
Normal file
133
variants/F072C8/variant_FLY_BUFFER_F072Cx.h
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (c) 2021, STMicroelectronics
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
* the "License"; You may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at:
|
||||||
|
* opensource.org/licenses/BSD-3-Clause
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* STM32 pins number
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define PA8 0
|
||||||
|
#define PA9 1
|
||||||
|
#define PA10 2
|
||||||
|
#define PA11 3
|
||||||
|
#define PA12 4
|
||||||
|
#define PA13 5
|
||||||
|
#define PA14 6
|
||||||
|
#define PA15 7
|
||||||
|
#define PB2 8
|
||||||
|
#define PB3 9
|
||||||
|
#define PB4 10
|
||||||
|
#define PB5 11
|
||||||
|
#define PB6 12
|
||||||
|
#define PB7 13
|
||||||
|
#define PB8 14
|
||||||
|
#define PB9 15
|
||||||
|
#define PB10 16
|
||||||
|
#define PB11 17
|
||||||
|
#define PB12 18
|
||||||
|
#define PB13 19
|
||||||
|
#define PB14 20
|
||||||
|
#define PB15 21
|
||||||
|
#define PC13 22
|
||||||
|
#define PC14 23
|
||||||
|
#define PC15 24
|
||||||
|
#define PA0 PIN_A0
|
||||||
|
#define PA1 PIN_A1
|
||||||
|
#define PA2 PIN_A2
|
||||||
|
#define PA3 PIN_A3
|
||||||
|
#define PA4 PIN_A4
|
||||||
|
#define PA5 PIN_A5
|
||||||
|
#define PA6 PIN_A6
|
||||||
|
#define PA7 PIN_A7
|
||||||
|
#define PB0 PIN_A8
|
||||||
|
#define PB1 PIN_A9
|
||||||
|
#define PF0 35
|
||||||
|
#define PF1 36
|
||||||
|
|
||||||
|
// Alternate pins number
|
||||||
|
#define PA1_ALT1 (PA1 | ALT1)
|
||||||
|
#define PA2_ALT1 (PA2 | ALT1)
|
||||||
|
#define PA3_ALT1 (PA3 | ALT1)
|
||||||
|
#define PA6_ALT1 (PA6 | ALT1)
|
||||||
|
#define PA7_ALT1 (PA7 | ALT1)
|
||||||
|
#define PA7_ALT2 (PA7 | ALT2)
|
||||||
|
#define PA7_ALT3 (PA7 | ALT3)
|
||||||
|
#define PB0_ALT1 (PB0 | ALT1)
|
||||||
|
#define PB1_ALT1 (PB1 | ALT1)
|
||||||
|
#define PB1_ALT2 (PB1 | ALT2)
|
||||||
|
#define PB14_ALT1 (PB14 | ALT1)
|
||||||
|
#define PB15_ALT1 (PB15 | ALT1)
|
||||||
|
#define PB15_ALT2 (PB15 | ALT2)
|
||||||
|
|
||||||
|
#define NUM_DIGITAL_PINS 37
|
||||||
|
#define NUM_ANALOG_INPUTS 10
|
||||||
|
|
||||||
|
// On-board LED pin number
|
||||||
|
#define LED_BUILTIN PA15
|
||||||
|
#define LED_RED LED_BUILTIN
|
||||||
|
#define LED_GREEN PB3
|
||||||
|
|
||||||
|
// SPI Definitions
|
||||||
|
#define PIN_SPI_SS PA4
|
||||||
|
#define PIN_SPI_MOSI PA7
|
||||||
|
#define PIN_SPI_MISO PA6
|
||||||
|
#define PIN_SPI_SCK PA5
|
||||||
|
|
||||||
|
// I2C Definitions
|
||||||
|
#define PIN_WIRE_SDA PB7
|
||||||
|
#define PIN_WIRE_SCL PB6
|
||||||
|
|
||||||
|
// Timer Definitions
|
||||||
|
#define TIMER_TONE TIM3
|
||||||
|
#define TIMER_SERVO TIM2
|
||||||
|
|
||||||
|
// UART Definitions
|
||||||
|
// Define here Serial instance number to map on Serial generic name
|
||||||
|
#define SERIAL_UART_INSTANCE 1
|
||||||
|
|
||||||
|
// Default pin used for 'Serial' instance
|
||||||
|
// Mandatory for Firmata
|
||||||
|
#define PIN_SERIAL_RX PA10
|
||||||
|
#define PIN_SERIAL_TX PA9
|
||||||
|
|
||||||
|
//Used for the GPS Module
|
||||||
|
#define PIN_SERIAL2_TX PA2
|
||||||
|
#define PIN_SERIAL2_RX PA3
|
||||||
|
|
||||||
|
// Extra HAL modules
|
||||||
|
#if !defined(HAL_DAC_MODULE_DISABLED)
|
||||||
|
#define HAL_DAC_MODULE_ENABLED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Arduino objects - C++ only
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
// These serial port names are intended to allow libraries and architecture-neutral
|
||||||
|
// sketches to automatically default to the correct port name for a particular type
|
||||||
|
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
|
||||||
|
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
|
||||||
|
//
|
||||||
|
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
|
||||||
|
//
|
||||||
|
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
|
||||||
|
//
|
||||||
|
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
|
||||||
|
//
|
||||||
|
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
|
||||||
|
//
|
||||||
|
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
|
||||||
|
// pins are NOT connected to anything by default.
|
||||||
|
#define SERIAL_PORT_MONITOR Serial
|
||||||
|
#define SERIAL_PORT_HARDWARE Serial
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user