目录
前言
1、建立 arduino文件夹,如图:
2、提取必要的文件
二、修改源码
1.屏蔽arduino.h、wiring.h里代码
2.修改Print.cpp文件
三,编译
总结
一、前言
本章主要实现 simpleFoc 里的 Serial.print功能,建立setup、loop函数,并且调用Serial.print功能。
一、建立目录,提取文件
1、建立 arduino文件夹,如图:
2、提取必要的文件
将Arduino_Core_STM32\cores\arduino目录下的Print.cpp、Print.h、Printable.h、wiring.h、WString.h、arduino.h六个文件复制到刚建立的arduino目录,并新添加hwSerial.cpp、hwSerial.h两个文件
二、修改源码
1.屏蔽arduino.h、wiring.h里代码
主要目的不要带入太多arduino底层代码。
arduino.h
// Include pins variant
//#include "pins_arduino.h"
wiring.h
#ifndef _WIRING_H_
#define _WIRING_H_
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
// #include "avr/dtostrf.h"
// #include "binary.h"
// #include "itoa.h"
// #include "wiring_analog.h"
// #include "wiring_constants.h"
// #include "wiring_digital.h"
// #include "wiring_pulse.h"
// #include "wiring_shift.h"
// #include "wiring_time.h"
// #include <board.h>
#ifdef __cplusplus
// #include "HardwareTimer.h"
// #include "Tone.h"
// #include "WCharacter.h"
// #include "WInterrupts.h"
// #include "WMath.h"
// #include "WSerial.h"
// #include "WString.h"
#endif // __cplusplus
#define clockCyclesPerMicrosecond() ( SystemCoreClock / 1000000L )
#define clockCyclesToMicroseconds(a) ( ((a) * 1000L) / (SystemCoreClock / 1000L) )
#define microsecondsToClockCycles(a) ( (a) * (SystemCoreClock / 1000000L) )
#endif /* _WIRING_H_ */
2.修改Print.cpp文件
在文件开始处添加代码如下:
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <math.h>
#include "Arduino.h"
#include "Print.h"
#include "stm32f1xx_hal.h"
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
修改 int _write(int file, char *ptr, int len) 函数,该接口的添加,即是实现Print类的printf功能
添加hwSerial.cpp、hwSerial.h源文件
#ifndef HW_SERIAL_H
#define HW_SERIAL_H
#include "Print.h"
class HardwareSerial : public Print
{
public:
// size_t write(uint8_t);
virtual size_t write(uint8_t);
inline size_t write(unsigned long n) { return write((uint8_t)n); }
inline size_t write(long n) { return write((uint8_t)n); }
inline size_t write(unsigned int n) { return write((uint8_t)n); }
inline size_t write(int n) { return write((uint8_t)n); }
size_t write(const uint8_t *buffer, size_t size);
using Print::write; // pull in write(str) and write(buf, size) from Print
// operator bool() { return true; }
};
#endif
该函数主要实现Print类的write功能
#include "hwSerial.h"
#include "stm32f1xx_hal.h"
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
HardwareSerial Serial;
size_t HardwareSerial::write(const uint8_t *buffer, size_t size)
{
HAL_UART_Transmit(&huart2, buffer, size, 0xFFFF);
return size;
}
size_t HardwareSerial::write(uint8_t c)
{
uint8_t buff = c;
return write(&buff, 1);
}
3、建立setup() 、Loop()函数并调用
在MotorControl目录下新建main.cpp,源码如下
#define __MAIN_CPP__
#include "simpleFoc_main.h"
#include "Print.h"
#include "hwSerial.h"
extern HardwareSerial Serial2;
#define Serial Serial2
extern "C" {
void setup() {
Serial.write('c');
Serial.write("123456789",9);
Serial.print("hello simpleFoc print\r\n");
Serial.printf("hello world\r\n");
}
void loop() {
}
}
三,编译
在tupfile.lua文件中添加编译项
进行编译,查看输出结果,如图
总结
进行到这里移植前置工作基本完成,后续针对adc采集,编码数据读取,pwm产生,开环控制,进行逐步展开。