mirror of
https://github.com/rene-dev/stmbl.git
synced 2026-02-05 18:01:21 +08:00
stmsp port
This commit is contained in:
59
shared/comps/dq_sp.c
Normal file
59
shared/comps/dq_sp.c
Normal file
@@ -0,0 +1,59 @@
|
||||
#include "commands.h"
|
||||
#include "common.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
|
||||
HAL_COMP(dq_sp);
|
||||
|
||||
HAL_PIN(mode);
|
||||
|
||||
//rotor position
|
||||
HAL_PIN(pos);
|
||||
HAL_PIN(polecount); //1
|
||||
|
||||
//a,b input
|
||||
HAL_PIN(a);
|
||||
HAL_PIN(b);
|
||||
|
||||
//d,q output
|
||||
HAL_PIN(d);
|
||||
HAL_PIN(q);
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct dq_ctx_t * ctx = (struct dq_ctx_t *)ctx_ptr;
|
||||
struct dq_pin_ctx_t *pins = (struct dq_pin_ctx_t *)pin_ptr;
|
||||
|
||||
//clarke transformation
|
||||
float a = PIN(a);
|
||||
float b = PIN(b);
|
||||
|
||||
float p = (int)MAX(PIN(polecount), 1.0);
|
||||
float pos = PIN(pos) * p;
|
||||
|
||||
float si = 0.0;
|
||||
float co = 0.0;
|
||||
sincos_fast(pos, &si, &co);
|
||||
|
||||
//park transformation
|
||||
float d = a * co + b * si;
|
||||
float q = -a * si + b * co;
|
||||
|
||||
PIN(d) = d;
|
||||
PIN(q) = q;
|
||||
}
|
||||
|
||||
hal_comp_t dq_comp_struct = {
|
||||
.name = "dq_sp",
|
||||
.nrt = 0,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.nrt_init = 0,
|
||||
.rt_start = 0,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = 0,
|
||||
.pin_count = sizeof(struct dq_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
238
shared/comps/map.c
Normal file
238
shared/comps/map.c
Normal file
@@ -0,0 +1,238 @@
|
||||
#include "commands.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
|
||||
#define POLES 50.0
|
||||
|
||||
HAL_COMP(map);
|
||||
|
||||
HAL_PIN(pos_in);
|
||||
HAL_PIN(pos_out);
|
||||
HAL_PIN(pos_out2);
|
||||
HAL_PIN(start);
|
||||
HAL_PIN(freq);
|
||||
HAL_PIN(over);
|
||||
HAL_PIN(print);
|
||||
HAL_PIN(state);
|
||||
HAL_PIN(counter);
|
||||
HAL_PIN(index);
|
||||
HAL_PINA(m, 50);
|
||||
|
||||
float interp(float value, float *array, uint32_t array_size) {
|
||||
value = CLAMP(value, 0.0, 1.0);
|
||||
array_size = MAX(array_size, 1);
|
||||
|
||||
uint32_t min_i = (uint32_t)(value * array_size) % array_size;
|
||||
uint32_t max_i = (uint32_t)(min_i + 1.0) % array_size;
|
||||
|
||||
float dy = minus(array[max_i], array[min_i]);
|
||||
float dx = 1.0 / array_size;
|
||||
|
||||
return (array[min_i] + (value - (float)min_i / array_size) * dy / dx);
|
||||
}
|
||||
|
||||
float interpd(float value, float *array, uint32_t array_size) {
|
||||
value = CLAMP(value, 0.0, 1.0);
|
||||
array_size = MAX(array_size, 1);
|
||||
|
||||
uint32_t min_i = (uint32_t)(value * array_size) % array_size;
|
||||
uint32_t max_i = (uint32_t)(min_i + 1.0) % array_size;
|
||||
|
||||
float dy = minus(array[max_i], array[min_i]);
|
||||
float dx = 1.0 / array_size;
|
||||
|
||||
return (dy / dx);
|
||||
}
|
||||
|
||||
struct map_ctx_t {
|
||||
float map[(int)POLES];
|
||||
float rmap[(int)POLES];
|
||||
int state;
|
||||
int index;
|
||||
int counter;
|
||||
float value;
|
||||
float pos;
|
||||
};
|
||||
|
||||
static void nrt_init(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
struct map_ctx_t *ctx = (struct map_ctx_t *)ctx_ptr;
|
||||
struct map_pin_ctx_t *pins = (struct map_pin_ctx_t *)pin_ptr;
|
||||
PIN(over) = 500.0;
|
||||
for(int i = 0; i < POLES; i++) {
|
||||
ctx->map[i] = 0.0;
|
||||
ctx->rmap[i] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
static void rt_start(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
struct map_ctx_t *ctx = (struct map_ctx_t *)ctx_ptr;
|
||||
struct map_pin_ctx_t *pins = (struct map_pin_ctx_t *)pin_ptr;
|
||||
|
||||
for(int i = 0; i < POLES; i++){
|
||||
ctx->rmap[i] = PINA(m, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
struct map_ctx_t *ctx = (struct map_ctx_t *)ctx_ptr;
|
||||
struct map_pin_ctx_t *pins = (struct map_pin_ctx_t *)pin_ptr;
|
||||
|
||||
PIN(state) = ctx->state;
|
||||
PIN(counter) = ctx->counter;
|
||||
PIN(index) = ctx->index;
|
||||
|
||||
switch(ctx->state) {
|
||||
case 0: // pipe through
|
||||
//PIN(pos_out) = PIN(pos_in);
|
||||
PIN(pos_out) = 0.0;
|
||||
PIN(pos_out2) = interp(PIN(pos_in) / 2.0 / M_PI + 0.5, ctx->rmap, POLES);
|
||||
|
||||
if(PIN(start) > 0.0) {
|
||||
PIN(pos_out) = 0.0;
|
||||
ctx->counter++;
|
||||
if(ctx->counter > 1000) {
|
||||
ctx->state = 1;
|
||||
ctx->index = 0;
|
||||
ctx->pos = 0.0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: // move motor +
|
||||
ctx->pos += 2.0 * M_PI * PIN(freq) * period;
|
||||
PIN(pos_out) = mod(ctx->pos);
|
||||
|
||||
if(ctx->pos >= (float)ctx->index * 2.0 * M_PI / POLES) {
|
||||
ctx->value = 0.0;
|
||||
ctx->counter = 0;
|
||||
ctx->state = 2;
|
||||
//PIN(pos_out) = mod((float)ctx->index / POLES * 2.0 * M_PI);
|
||||
}
|
||||
|
||||
if(ctx->index >= POLES) {
|
||||
ctx->state = 3;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // measure
|
||||
ctx->value = PIN(pos_in); // PIN(over);
|
||||
ctx->counter++;
|
||||
if(ctx->counter > PIN(over)) {
|
||||
ctx->map[ctx->index] = mod(ctx->value);
|
||||
ctx->state = 1;
|
||||
ctx->index++;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 3: // move motor + 1
|
||||
ctx->pos += 2.0 * M_PI * PIN(freq) * period;
|
||||
PIN(pos_out) = mod(ctx->pos);
|
||||
|
||||
if(ctx->pos >= (float)(ctx->index + 1) * 2.0 * M_PI / POLES) {
|
||||
ctx->state = 4;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // move motor -
|
||||
ctx->pos -= 2.0 * M_PI * PIN(freq) * period;
|
||||
PIN(pos_out) = mod(ctx->pos);
|
||||
|
||||
if(ctx->pos <= (float)ctx->index * 2.0 * M_PI / POLES) {
|
||||
ctx->value = 0.0;
|
||||
ctx->counter = 0;
|
||||
ctx->state = 5;
|
||||
//PIN(pos_out) = mod((float)ctx->index / POLES * 2.0 * M_PI);
|
||||
}
|
||||
|
||||
if(ctx->index <= 0) {
|
||||
ctx->state = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: // measure
|
||||
ctx->value += minus(PIN(pos_in), ctx->value) / 2.0; // PIN(over);
|
||||
ctx->counter++;
|
||||
if(ctx->counter > PIN(over)) {
|
||||
ctx->map[ctx->index] = mod(ctx->value);
|
||||
ctx->state = 4;
|
||||
ctx->index--;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 6: // remap
|
||||
break;
|
||||
|
||||
case 7: // map
|
||||
PIN(pos_out2) = interp(PIN(pos_in) / 2.0 / M_PI + 0.5, ctx->rmap, POLES);
|
||||
|
||||
if(PIN(start) <= 0.0) {
|
||||
ctx->state = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void nrt_func(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
struct map_ctx_t *ctx = (struct map_ctx_t *)ctx_ptr;
|
||||
struct map_pin_ctx_t *pins = (struct map_pin_ctx_t *)pin_ptr;
|
||||
|
||||
if(PIN(print) > 0.0) {
|
||||
PIN(print) = 0.0;
|
||||
printf("\nmap(mot_pos) -> fb_pos\n");
|
||||
printf("index, map[index], pos(index)\n");
|
||||
for(int i = 0; i < POLES; i++) {
|
||||
printf("%i, %f, %f\n", i, ctx->map[i], (float)i / POLES * 2.0 * M_PI);
|
||||
}
|
||||
printf("\nrmap(fb_pos) -> mot_pos\n");
|
||||
printf("index, map[index], pos(index)\n");
|
||||
for(int i = 0; i < POLES; i++) {
|
||||
printf("%i, %f, %f\n", i, ctx->rmap[i], (float)i / POLES * 2.0 * M_PI);
|
||||
}
|
||||
}
|
||||
|
||||
if(ctx->state == 6) { // remap
|
||||
float p = 0.0;
|
||||
float pp = 0.0;
|
||||
float error = 0.0;
|
||||
int j = 0;
|
||||
|
||||
for(int i = 0; i < POLES; i++) {
|
||||
p = (float)i * 2.0 * M_PI / POLES - M_PI;
|
||||
j = 0;
|
||||
do {
|
||||
pp += error * 0.6 / interpd(pp / 2.0 / M_PI + 0.5, ctx->map, POLES);
|
||||
pp = mod(pp);
|
||||
error = minus(p, interp(pp / 2.0 / M_PI + 0.5, ctx->map, POLES));
|
||||
j++;
|
||||
} while(j < 200 && ABS(error) >= 2.0 * M_PI / 32768.0 * 20.0);
|
||||
//printf("index %u, error %f, it %u\n", i, error, j);
|
||||
error = 0.0;
|
||||
|
||||
ctx->rmap[i] = pp;
|
||||
PINA(m, i) = pp;
|
||||
printf("map0.m%i=%f\n", i, pp);
|
||||
}
|
||||
|
||||
ctx->state = 7;
|
||||
}
|
||||
}
|
||||
|
||||
hal_comp_t map_comp_struct = {
|
||||
.name = "map",
|
||||
.nrt = nrt_func,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.nrt_init = nrt_init,
|
||||
.rt_start = rt_start,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = sizeof(struct map_ctx_t),
|
||||
.pin_count = sizeof(struct map_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
32
shared/comps/pole.c
Normal file
32
shared/comps/pole.c
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "commands.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
|
||||
HAL_COMP(pole);
|
||||
|
||||
HAL_PIN(pos);
|
||||
HAL_PIN(cpos);
|
||||
HAL_PIN(p);
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct pole_ctx_t * ctx = (struct pole_ctx_t *)ctx_ptr;
|
||||
struct pole_pin_ctx_t *pins = (struct pole_pin_ctx_t *)pin_ptr;
|
||||
|
||||
PIN(cpos) = mod(PIN(pos) * PIN(p));
|
||||
}
|
||||
|
||||
hal_comp_t pole_comp_struct = {
|
||||
.name = "pole",
|
||||
.nrt = 0,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.nrt_init = 0,
|
||||
.rt_start = 0,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = 0,
|
||||
.pin_count = sizeof(struct pole_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
133
shared/comps/rl.c
Normal file
133
shared/comps/rl.c
Normal file
@@ -0,0 +1,133 @@
|
||||
#include "commands.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
|
||||
HAL_COMP(rl);
|
||||
|
||||
HAL_PIN(ra);
|
||||
HAL_PIN(rb);
|
||||
HAL_PIN(ld);
|
||||
HAL_PIN(lq);
|
||||
HAL_PIN(la);
|
||||
HAL_PIN(lb);
|
||||
|
||||
HAL_PIN(max_cur);
|
||||
HAL_PIN(udc);
|
||||
HAL_PIN(start);
|
||||
HAL_PIN(state);
|
||||
|
||||
HAL_PIN(ki);
|
||||
HAL_PIN(time);
|
||||
HAL_PIN(t);
|
||||
|
||||
HAL_PIN(ia_fb);
|
||||
HAL_PIN(ib_fb);
|
||||
HAL_PIN(ua_fb);
|
||||
HAL_PIN(ub_fb);
|
||||
HAL_PIN(ua);
|
||||
HAL_PIN(ub);
|
||||
|
||||
struct rl_ctx_t{
|
||||
uint32_t state;
|
||||
float error_sum;
|
||||
float time;
|
||||
float ra;
|
||||
float rb;
|
||||
};
|
||||
|
||||
static void nrt_init(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
struct rl_ctx_t * ctx = (struct rl_ctx_t *)ctx_ptr;
|
||||
struct rl_pin_ctx_t *pins = (struct rl_pin_ctx_t *)pin_ptr;
|
||||
|
||||
PIN(time) = 1.0;
|
||||
PIN(ki) = 100.0;
|
||||
PIN(max_cur) = 1.0;
|
||||
ctx->ra = 0.0;
|
||||
ctx->rb = 0.0;
|
||||
ctx->state = 0;
|
||||
ctx->time = 0.0;
|
||||
ctx->error_sum = 0.0;
|
||||
}
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
struct rl_ctx_t * ctx = (struct rl_ctx_t *)ctx_ptr;
|
||||
struct rl_pin_ctx_t *pins = (struct rl_pin_ctx_t *)pin_ptr;
|
||||
|
||||
switch(ctx->state){
|
||||
case 0:
|
||||
if(PIN(start) > 0.0){
|
||||
ctx->state = 1;
|
||||
ctx->error_sum = 0.0;
|
||||
ctx->time = 0.0;
|
||||
}
|
||||
PIN(ua) = 0.0;
|
||||
PIN(ub) = 0.0;
|
||||
break;
|
||||
|
||||
case 1: // measure ra
|
||||
ctx->time += period;
|
||||
ctx->error_sum += (PIN(max_cur) - PIN(ia_fb)) * period * PIN(ki);
|
||||
PIN(ua) = ctx->error_sum;
|
||||
|
||||
if(ABS(PIN(ia_fb) > 0.1)){
|
||||
ctx->ra = ctx->ra * 0.95 + PIN(ua_fb) / PIN(ia_fb) * 0.05;
|
||||
}
|
||||
|
||||
if(ctx->time >= PIN(time)){
|
||||
ctx->time = 0.0;
|
||||
ctx->state = 2;
|
||||
ctx->error_sum = 0.0;
|
||||
PIN(ua) = 0.0;
|
||||
PIN(ub) = 0.0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // measure rb
|
||||
ctx->time += period;
|
||||
ctx->error_sum += (PIN(max_cur) - PIN(ib_fb)) * period * PIN(ki);
|
||||
PIN(ub) = ctx->error_sum;
|
||||
|
||||
if(ABS(PIN(ib_fb) > 0.1)){
|
||||
ctx->rb = ctx->rb * 0.95 + PIN(ub_fb) / PIN(ib_fb) * 0.05;
|
||||
}
|
||||
|
||||
if(ctx->time >= PIN(time)){
|
||||
ctx->time = 0.0;
|
||||
ctx->state = 3;
|
||||
ctx->error_sum = 0.0;
|
||||
PIN(ua) = 0.0;
|
||||
PIN(ub) = 0.0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if(PIN(start) <= 0.0){
|
||||
ctx->state = 0;
|
||||
}
|
||||
ctx->time = 0.0;
|
||||
PIN(ua) = 0.0;
|
||||
PIN(ub) = 0.0;
|
||||
break;
|
||||
}
|
||||
|
||||
PIN(state) = ctx->state;
|
||||
PIN(t) = ctx->time;
|
||||
PIN(ra) = ctx->ra;
|
||||
PIN(rb) = ctx->rb;
|
||||
}
|
||||
|
||||
hal_comp_t rl_comp_struct = {
|
||||
.name = "rl",
|
||||
.nrt = 0,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.nrt_init = nrt_init,
|
||||
.rt_start = 0,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = 0,
|
||||
.pin_count = sizeof(struct rl_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
67
shared/flashconf.c
Normal file
67
shared/flashconf.c
Normal file
@@ -0,0 +1,67 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "commands.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "hal.h"
|
||||
|
||||
char config[1 * 1024];
|
||||
const char *config_ro = (char *)0x0801fc00;
|
||||
|
||||
void flashloadconf(char *ptr) {
|
||||
strncpy(config, config_ro, sizeof(config));
|
||||
}
|
||||
COMMAND("flashloadconf", flashloadconf, "load config from flash");
|
||||
|
||||
void flashsaveconf(char *ptr) {
|
||||
printf("erasing flash page...\n");
|
||||
HAL_FLASH_Unlock();
|
||||
uint32_t PageError = 0;
|
||||
HAL_StatusTypeDef status;
|
||||
FLASH_EraseInitTypeDef eraseinitstruct;
|
||||
eraseinitstruct.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||
eraseinitstruct.PageAddress = (uint32_t)config_ro;
|
||||
eraseinitstruct.NbPages = 1;
|
||||
status = HAL_FLASHEx_Erase(&eraseinitstruct, &PageError);
|
||||
|
||||
if(status != HAL_OK) {
|
||||
printf("error!\n");
|
||||
HAL_FLASH_Lock();
|
||||
return;
|
||||
}
|
||||
printf("saving conf\n");
|
||||
int ret = 0;
|
||||
for(int i = 0; i < sizeof(config); i += 4) {
|
||||
uint32_t word = (config[i + 0]) + (config[i + 1] << 8) + (config[i + 2] << 16) + (config[i + 3] << 24);
|
||||
ret = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, (uint32_t)config_ro + i, word) != HAL_OK;
|
||||
if(ret) {
|
||||
printf("error writing %i\n", ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("OK %i bytes written\n", sizeof(config));
|
||||
HAL_FLASH_Lock();
|
||||
}
|
||||
COMMAND("flashsaveconf", flashsaveconf, "save config to flash");
|
||||
|
||||
void loadconf(char *ptr) {
|
||||
hal_parse(config);
|
||||
}
|
||||
COMMAND("loadconf", loadconf, "parse config");
|
||||
|
||||
void showconf(char *ptr) {
|
||||
printf("%s", config_ro);
|
||||
}
|
||||
COMMAND("showconf", showconf, "show config");
|
||||
|
||||
void appendconf(char *ptr) {
|
||||
printf("adding %s\n", ptr);
|
||||
strncat(config, ptr, sizeof(config) - 1);
|
||||
strncat(config, "\n", sizeof(config) - 1);
|
||||
}
|
||||
COMMAND("appendconf", appendconf, "append string to config");
|
||||
|
||||
void deleteconf(char *ptr) {
|
||||
config[0] = '\0';
|
||||
}
|
||||
COMMAND("deleteconf", deleteconf, "delete config");
|
||||
249
stmsp/stm32f303/Makefile
Normal file
249
stmsp/stm32f303/Makefile
Normal file
@@ -0,0 +1,249 @@
|
||||
# Optimization level, can be [0, 1, 2, 3, s].
|
||||
# 0 = turn off optimization. s = optimize for size.
|
||||
#
|
||||
OPT = -O3
|
||||
# OPT = -O1 # for debugging
|
||||
|
||||
# Object files directory
|
||||
# Warning: this will be removed by make clean!
|
||||
#
|
||||
OBJDIR = obj_stmspf3
|
||||
|
||||
# Target file name (without extension)
|
||||
TARGET = $(OBJDIR)/stmspf3
|
||||
|
||||
# Define all C source files (dependencies are generated automatically)
|
||||
INCDIRS += stmsp/stm32f303/inc
|
||||
SOURCES += stmsp/stm32f303/src/main.c
|
||||
SOURCES += stmsp/stm32f303/src/adc.c
|
||||
SOURCES += stmsp/stm32f303/src/opamp.c
|
||||
SOURCES += stmsp/stm32f303/src/stm32f3xx_hal_msp.c
|
||||
SOURCES += stmsp/stm32f303/src/stm32f3xx_it.c
|
||||
SOURCES += stmsp/stm32f303/src/usb_device.c
|
||||
SOURCES += stmsp/stm32f303/src/usbd_cdc_if.c
|
||||
SOURCES += stmsp/stm32f303/src/usbd_conf.c
|
||||
SOURCES += stmsp/stm32f303/src/usbd_desc.c
|
||||
SOURCES += stmsp/stm32f303/src/version.c
|
||||
|
||||
SOURCES += stmsp/stm32f303/src/hal_tbl.c
|
||||
|
||||
CFLAGS += -DHAL_MAX_CTX=1024
|
||||
COMPS += stmsp/stm32f303/src/comps/hv.c
|
||||
COMPS += stmsp/stm32f303/src/comps/io.c
|
||||
COMPS += stmsp/stm32f303/src/comps/tle.c
|
||||
|
||||
COMPS += shared/comps/sim.c
|
||||
COMPS += shared/comps/term.c
|
||||
COMPS += shared/comps/curpid.c
|
||||
COMPS += shared/comps/svm.c
|
||||
COMPS += shared/comps/dq.c
|
||||
COMPS += shared/comps/idq.c
|
||||
COMPS += shared/comps/pole.c
|
||||
COMPS += shared/comps/map.c
|
||||
COMPS += shared/comps/vel.c
|
||||
# COMPS += shared/comps/trc.c
|
||||
COMPS += shared/comps/rl.c
|
||||
COMPS += shared/comps/ypid.c
|
||||
|
||||
SOURCES += $(COMPS)
|
||||
|
||||
INCDIRS += shared
|
||||
SOURCES += shared/ringbuf.c
|
||||
SOURCES += shared/crc8.c
|
||||
SOURCES += shared/angle.c
|
||||
SOURCES += shared/hal.c
|
||||
SOURCES += shared/commands.c
|
||||
SOURCES += shared/flashconf.c
|
||||
|
||||
#USB Driver
|
||||
USB_DEVICE_DIR = lib/STM32_USB_Device_Library-2.4.2
|
||||
|
||||
#USB class
|
||||
INCDIRS += $(USB_DEVICE_DIR)/Class/CDC/Inc/
|
||||
SOURCES += $(USB_DEVICE_DIR)/Class/CDC/Src/usbd_cdc.c
|
||||
|
||||
#USB core
|
||||
INCDIRS += $(USB_DEVICE_DIR)/Core/Inc/
|
||||
SOURCES += $(USB_DEVICE_DIR)/Core/Src/usbd_core.c
|
||||
SOURCES += $(USB_DEVICE_DIR)/Core/Src/usbd_ctlreq.c
|
||||
SOURCES += $(USB_DEVICE_DIR)/Core/Src/usbd_ioreq.c
|
||||
|
||||
#CMSIS
|
||||
CPPFLAGS += -DSTM32F303xC
|
||||
INCDIRS += lib/CMSIS/Include/
|
||||
INCDIRS += lib/CMSIS/Device/ST/STM32F3xx/Include/
|
||||
SOURCES += lib/CMSIS/Device/ST/STM32F3xx/Source/Templates/gcc/startup_stm32f303xc.s
|
||||
SOURCES += lib/CMSIS/Device/ST/STM32F3xx/Source/Templates/system_stm32f3xx.c
|
||||
|
||||
#stm32f3 HAL Driver
|
||||
HAL_DRV_DIR = lib/STM32F3xx_HAL_Driver/
|
||||
|
||||
INCDIRS += $(HAL_DRV_DIR)/Inc
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_adc.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_adc_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_cortex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_crc.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_crc_ex.c
|
||||
# SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_dac.c
|
||||
# SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_dac_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_gpio.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_opamp.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_opamp_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_rcc.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_rcc_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_tim.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_tim_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_uart.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_uart_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_spi.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_spi_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_flash.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_flash_ex.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_pcd.c
|
||||
SOURCES += $(HAL_DRV_DIR)/Src/stm32f3xx_hal_pcd_ex.c
|
||||
|
||||
LDSCRIPT = stmsp/stm32f303/STM32F303CBTx_FLASH.ld
|
||||
|
||||
#============================================================================
|
||||
OBJECTS += $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(SOURCES))))
|
||||
CPPFLAGS += $(addprefix -I,$(INCDIRS))
|
||||
|
||||
#---------------- Preprocessor Options ----------------
|
||||
# -fsingle... make better use of the single-precision FPU
|
||||
# -g generate debugging information
|
||||
# -save-temps preserve .s and .i-files
|
||||
#
|
||||
#CPPFLAGS +=
|
||||
# CPPFLAGS += -g
|
||||
# CPPFLAGS += -save-temps=obj
|
||||
|
||||
#---------------- C Compiler Options ----------------
|
||||
# -O* optimization level
|
||||
# -f... tuning, see GCC documentation
|
||||
# -Wall... warning level
|
||||
#
|
||||
CFLAGS += $(OPT)
|
||||
CFLAGS += -std=gnu11
|
||||
CFLAGS += -ffunction-sections
|
||||
CFLAGS += -fdata-sections
|
||||
CFLAGS += -Wall
|
||||
CFLAGS += -fno-builtin ## from old
|
||||
CFLAGS += -nostartfiles
|
||||
CFLAGS += -Wfatal-errors
|
||||
CFLAGS += -Wno-pointer-sign #for usb lib...
|
||||
#CFLAGS += -Wdouble-promotion
|
||||
CFLAGS += -Wfloat-conversion
|
||||
CFLAGS += -fsingle-precision-constant
|
||||
# CFLAGS += -ffast-math
|
||||
CFLAGS += -ffinite-math-only
|
||||
CFLAGS += -fno-trapping-math
|
||||
CFLAGS += -fno-signaling-nans
|
||||
CFLAGS += -fno-rounding-math
|
||||
CFLAGS += -fno-signed-zeros
|
||||
CFLAGS += -fno-math-errno
|
||||
#CFLAGS += -Wstrict-prototypes
|
||||
#CFLAGS += -Wextra
|
||||
#CFLAGS += -Wpointer-arith
|
||||
#CFLAGS += -Winline
|
||||
#CFLAGS += -Wunreachable-code
|
||||
#CFLAGS += -Wundef
|
||||
|
||||
# Use a friendly C dialect
|
||||
CPPFLAGS += -fno-strict-aliasing
|
||||
CPPFLAGS += -fwrapv
|
||||
|
||||
#---------------- C++ Compiler Options ----------------
|
||||
#
|
||||
CXXFLAGS += $(OPT)
|
||||
CXXFLAGS += -ffunction-sections
|
||||
CXXFLAGS += -fdata-sections
|
||||
CXXFLAGS += -Wall
|
||||
|
||||
#---------------- Assembler Options ----------------
|
||||
# -Wa,... tell GCC to pass this to the assembler
|
||||
#
|
||||
|
||||
#---------------- Linker Options ----------------
|
||||
# -Wl,... tell GCC to pass this to linker
|
||||
# -Map create map file
|
||||
# --cref add cross reference to map file
|
||||
#
|
||||
LDFLAGS += $(OPT)
|
||||
LDFLAGS += -lm
|
||||
LDFLAGS += -Wl,-Map=$(TARGET).map,--cref
|
||||
LDFLAGS += -Wl,--gc-sections
|
||||
|
||||
# LDFLAGS += -specs=nano.specs -u _printf_float -u _scanf_float
|
||||
LDFLAGS += -lc -specs=nosys.specs #fixes sbrk missing? present in eclipse?
|
||||
LDFLAGS += -T$(LDSCRIPT)
|
||||
|
||||
#============================================================================
|
||||
|
||||
POSTLD = $(PYTHON) tools/add_version_info.py # -q
|
||||
|
||||
# Compiler flags to generate dependency files
|
||||
#
|
||||
GENDEPFLAGS = -MMD -MP
|
||||
|
||||
# Combine all necessary flags and optional flags
|
||||
# Add target processor to flags.
|
||||
#
|
||||
CPU = -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
|
||||
|
||||
CFLAGS += $(CPU)
|
||||
CXXFLAGS += $(CPU)
|
||||
ASFLAGS += $(CPU)
|
||||
LDFLAGS += $(CPU)
|
||||
|
||||
ADDRESS = 0x8004000
|
||||
|
||||
# Default target
|
||||
#
|
||||
all: gccversion build showsize
|
||||
|
||||
build: tbl elf hex bin lss sym
|
||||
|
||||
elf: $(TARGET).elf
|
||||
hex: $(TARGET).hex
|
||||
bin: tbl $(TARGET).bin
|
||||
lss: $(TARGET).lss
|
||||
sym: $(TARGET).sym
|
||||
|
||||
# Display compiler version information
|
||||
#
|
||||
|
||||
stmsp/stm32f303/inc/commandslist.h: tbl
|
||||
stmsp/stm32f303/inc/hal_tbl.h: tbl
|
||||
stmsp/stm32f303/src/hal_tbl.c: tbl
|
||||
|
||||
tbl:
|
||||
@echo Generating tables
|
||||
@$(PYTHON) tools/create_hal_tbl.py stmsp/stm32f303/ $(COMPS)
|
||||
#shared/comps/*.c src/comps/hw/*.c src/comps/*.c
|
||||
@$(PYTHON) tools/create_cmd.py $(SOURCES) > stmsp/stm32f303/inc/commandslist.h
|
||||
|
||||
# Target: clean project
|
||||
#
|
||||
clean:
|
||||
@echo Cleaning project:
|
||||
rm -rf $(OBJDIR)
|
||||
rm -rf stmsp/stm32f303/inc/commandslist.h
|
||||
rm -rf stmsp/stm32f303/inc/hal_tbl.h
|
||||
rm -rf stmsp/stm32f303/src/hal_tbl.c
|
||||
rm -rf hv_firmware.o
|
||||
|
||||
# Include the base rules
|
||||
#
|
||||
include base.mak
|
||||
|
||||
# Include the dependency files
|
||||
#
|
||||
-include $(OBJECTS:.o=.d)
|
||||
|
||||
# Listing of phony targets
|
||||
#
|
||||
.PHONY: all build flash clean \
|
||||
boot boot_clean boot_flash btburn boot_btflash boot_flash\
|
||||
elf lss sym \
|
||||
showsize gccversion tbl
|
||||
216
stmsp/stm32f303/STM32F303CBTx_FLASH.ld
Normal file
216
stmsp/stm32f303/STM32F303CBTx_FLASH.ld
Normal file
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
*****************************************************************************
|
||||
**
|
||||
|
||||
** File : LinkerScript.ld
|
||||
**
|
||||
** Abstract : Linker script for STM32F303CBTx Device with
|
||||
** 128KByte FLASH, 32KByte RAM
|
||||
**
|
||||
** Set heap size, stack size and stack location according
|
||||
** to application requirements.
|
||||
**
|
||||
** Set memory bank area and size if external memory is used.
|
||||
**
|
||||
** Target : STMicroelectronics STM32
|
||||
**
|
||||
**
|
||||
** Distribution: The file is distributed as is, without any warranty
|
||||
** of any kind.
|
||||
**
|
||||
*****************************************************************************
|
||||
** @attention
|
||||
**
|
||||
** <h2><center>© COPYRIGHT(c) 2014 Ac6</center></h2>
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without modification,
|
||||
** are permitted provided that the following conditions are met:
|
||||
** 1. Redistributions of source code must retain the above copyright notice,
|
||||
** this list of conditions and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
** this list of conditions and the following disclaimer in the documentation
|
||||
** and/or other materials provided with the distribution.
|
||||
** 3. Neither the name of Ac6 nor the names of its contributors
|
||||
** may be used to endorse or promote products derived from this software
|
||||
** without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
/* Entry Point */
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
/* Highest address of the user mode stack */
|
||||
_estack = 0x20008000; /* end of RAM */
|
||||
/* Generate a link error if heap and stack don't fit into RAM */
|
||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
||||
_Min_Stack_Size = 0x800; /* required amount of stack */
|
||||
|
||||
/* Specify the memory areas */
|
||||
MEMORY
|
||||
{
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
|
||||
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 8K
|
||||
FLASH (rx) : ORIGIN = 0x8004000, LENGTH = 111K
|
||||
}
|
||||
|
||||
/* Define output sections */
|
||||
SECTIONS
|
||||
{
|
||||
/* The startup code goes first into FLASH */
|
||||
.isr_vector :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.isr_vector)) /* Startup code */
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
/* version info needs to have a section, so the bootloader and python script can find it */
|
||||
.version_info :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.version_info))
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
/* The program code and other data goes into FLASH */
|
||||
.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 goes into FLASH */
|
||||
.rodata :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||
.ARM : {
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx*)
|
||||
__exidx_end = .;
|
||||
} >FLASH
|
||||
|
||||
.preinit_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP (*(.preinit_array*))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
} >FLASH
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array*))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
} >FLASH
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array*))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
} >FLASH
|
||||
|
||||
/* used by the startup to initialize data */
|
||||
_sidata = LOADADDR(.data);
|
||||
|
||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
||||
.data :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sdata = .; /* create a global symbol at data start */
|
||||
*(.data) /* .data sections */
|
||||
*(.data*) /* .data* sections */
|
||||
|
||||
. = ALIGN(4);
|
||||
_edata = .; /* define a global symbol at data end */
|
||||
} >RAM AT> FLASH
|
||||
|
||||
_siccmram = LOADADDR(.ccmram);
|
||||
|
||||
/* CCM-RAM section
|
||||
*
|
||||
* IMPORTANT NOTE!
|
||||
* If initialized variables will be placed in this section,
|
||||
* the startup code needs to be modified to copy the init-values.
|
||||
*/
|
||||
.ccmram :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sccmram = .; /* create a global symbol at ccmram start */
|
||||
*(.ccmram)
|
||||
*(.ccmram*)
|
||||
|
||||
. = ALIGN(4);
|
||||
_eccmram = .; /* create a global symbol at ccmram end */
|
||||
} >CCMRAM AT> FLASH
|
||||
|
||||
|
||||
/* Uninitialized data section */
|
||||
. = ALIGN(4);
|
||||
.bss :
|
||||
{
|
||||
/* This is used by the startup in order to initialize the .bss secion */
|
||||
_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 left */
|
||||
._user_heap_stack :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
PROVIDE ( end = . );
|
||||
PROVIDE ( _end = . );
|
||||
. = . + _Min_Heap_Size;
|
||||
. = . + _Min_Stack_Size;
|
||||
. = ALIGN(8);
|
||||
} >RAM
|
||||
|
||||
|
||||
|
||||
/* Remove information from the standard libraries */
|
||||
/DISCARD/ :
|
||||
{
|
||||
libc.a ( * )
|
||||
libm.a ( * )
|
||||
libgcc.a ( * )
|
||||
}
|
||||
|
||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||
}
|
||||
|
||||
|
||||
92
stmsp/stm32f303/inc/adc.h
Normal file
92
stmsp/stm32f303/inc/adc.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* File Name : ADC.h
|
||||
* Description : This file provides code for the configuration
|
||||
* of the ADC instances.
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __adc_H
|
||||
#define __adc_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern ADC_HandleTypeDef hadc1;
|
||||
extern ADC_HandleTypeDef hadc2;
|
||||
extern ADC_HandleTypeDef hadc3;
|
||||
extern ADC_HandleTypeDef hadc4;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
extern void Error_Handler(void);
|
||||
|
||||
void MX_ADC1_Init(void);
|
||||
void MX_ADC2_Init(void);
|
||||
void MX_ADC3_Init(void);
|
||||
void MX_ADC4_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /*__ adc_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
47
stmsp/stm32f303/inc/commandslist.h
Normal file
47
stmsp/stm32f303/inc/commandslist.h
Normal file
@@ -0,0 +1,47 @@
|
||||
//generated by tools/create_cmd.py DO NOT EDIT
|
||||
extern void about(char *); // found in stmsp/stm32f303/src/main.c line: 188
|
||||
extern void bootloader(char *); // found in stmsp/stm32f303/src/main.c line: 203
|
||||
extern void reset(char *); // found in stmsp/stm32f303/src/main.c line: 208
|
||||
extern void hal_term_print_info(char *); // found in shared/hal.c line: 277
|
||||
extern void load(char *); // found in shared/hal.c line: 550
|
||||
extern void show(char *); // found in shared/hal.c line: 565
|
||||
extern void list(char *); // found in shared/hal.c line: 595
|
||||
extern void show_hal(char *); // found in shared/hal.c line: 605
|
||||
extern void hal_start(char *); // found in shared/hal.c line: 713
|
||||
extern void hal_stop(char *); // found in shared/hal.c line: 740
|
||||
extern void fault(char *); // found in shared/hal.c line: 987
|
||||
extern void debug_level(char *); // found in shared/hal.c line: 1002
|
||||
extern void hal_linked_pins(char *); // found in shared/hal.c line: 1027
|
||||
extern void listcmd(char *); // found in shared/commands.c line: 36
|
||||
extern void uptime(char *); // found in shared/commands.c line: 47
|
||||
extern void flashloadconf(char *); // found in shared/flashconf.c line: 14
|
||||
extern void flashsaveconf(char *); // found in shared/flashconf.c line: 45
|
||||
extern void loadconf(char *); // found in shared/flashconf.c line: 50
|
||||
extern void showconf(char *); // found in shared/flashconf.c line: 55
|
||||
extern void appendconf(char *); // found in shared/flashconf.c line: 62
|
||||
extern void deleteconf(char *); // found in shared/flashconf.c line: 67
|
||||
|
||||
|
||||
cmd_t cmd[] = {
|
||||
{"about", "show system infos", about}, // found in stmsp/stm32f303/src/main.c line: 188
|
||||
{"bootloader", "enter bootloader", bootloader}, // found in stmsp/stm32f303/src/main.c line: 203
|
||||
{"reset", "reset STMBL", reset}, // found in stmsp/stm32f303/src/main.c line: 208
|
||||
{"hal", "print HAL stats", hal_term_print_info}, // found in shared/hal.c line: 277
|
||||
{"load", "load comp from flash", load}, // found in shared/hal.c line: 550
|
||||
{"show", "show comps in flash", show}, // found in shared/hal.c line: 565
|
||||
{"list", "show comp instances", list}, // found in shared/hal.c line: 595
|
||||
{"show_hal", "show hal structure", show_hal}, // found in shared/hal.c line: 605
|
||||
{"start", "start rt system", hal_start}, // found in shared/hal.c line: 713
|
||||
{"stop", "stop rt system", hal_stop}, // found in shared/hal.c line: 740
|
||||
{"fault", "trigger fault", fault}, // found in shared/hal.c line: 987
|
||||
{"debug_level", "set hal debug level, 0 = print all, 1 = print errors, 2 = no output", debug_level}, // found in shared/hal.c line: 1002
|
||||
{"linked", "show linked pins", hal_linked_pins}, // found in shared/hal.c line: 1027
|
||||
{"help", "print this", listcmd}, // found in shared/commands.c line: 36
|
||||
{"uptime", "display uptime", uptime}, // found in shared/commands.c line: 47
|
||||
{"flashloadconf", "load config from flash", flashloadconf}, // found in shared/flashconf.c line: 14
|
||||
{"flashsaveconf", "save config to flash", flashsaveconf}, // found in shared/flashconf.c line: 45
|
||||
{"loadconf", "parse config", loadconf}, // found in shared/flashconf.c line: 50
|
||||
{"showconf", "show config", showconf}, // found in shared/flashconf.c line: 55
|
||||
{"appendconf", "append string to config", appendconf}, // found in shared/flashconf.c line: 62
|
||||
{"deleteconf", "delete config", deleteconf}, // found in shared/flashconf.c line: 67
|
||||
};
|
||||
270
stmsp/stm32f303/inc/hal_tbl.h
Normal file
270
stmsp/stm32f303/inc/hal_tbl.h
Normal file
@@ -0,0 +1,270 @@
|
||||
#pragma once
|
||||
//generated by tools/create_hal_tbl.py DO NOT EDIT
|
||||
|
||||
struct pin_ctx_t{
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
};
|
||||
|
||||
struct hv_pin_ctx_t{ // found in stmsp/stm32f303/src/comps/hv.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t a;
|
||||
hal_pin_inst_t b;
|
||||
hal_pin_inst_t a_fb;
|
||||
hal_pin_inst_t b_fb;
|
||||
hal_pin_inst_t udc;
|
||||
hal_pin_inst_t hv_temp;
|
||||
hal_pin_inst_t en;
|
||||
hal_pin_inst_t ena;
|
||||
hal_pin_inst_t enb;
|
||||
hal_pin_inst_t fault;
|
||||
hal_pin_inst_t min_on;
|
||||
hal_pin_inst_t min_off;
|
||||
};
|
||||
|
||||
struct io_pin_ctx_t{ // found in stmsp/stm32f303/src/comps/io.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t led;
|
||||
hal_pin_inst_t oc1;
|
||||
hal_pin_inst_t oc2;
|
||||
hal_pin_inst_t ena;
|
||||
hal_pin_inst_t enb;
|
||||
hal_pin_inst_t hv_temp;
|
||||
hal_pin_inst_t dc_link;
|
||||
hal_pin_inst_t bemf0;
|
||||
hal_pin_inst_t bemf1;
|
||||
hal_pin_inst_t in0;
|
||||
hal_pin_inst_t in1;
|
||||
hal_pin_inst_t iap;
|
||||
hal_pin_inst_t ian;
|
||||
hal_pin_inst_t ibp;
|
||||
hal_pin_inst_t ibn;
|
||||
hal_pin_inst_t ip;
|
||||
hal_pin_inst_t in;
|
||||
hal_pin_inst_t ia;
|
||||
hal_pin_inst_t ib;
|
||||
};
|
||||
|
||||
struct tle_pin_ctx_t{ // found in stmsp/stm32f303/src/comps/tle.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t pos;
|
||||
hal_pin_inst_t error;
|
||||
};
|
||||
|
||||
struct sim_pin_ctx_t{ // found in shared/comps/sim.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t amp;
|
||||
hal_pin_inst_t freq;
|
||||
hal_pin_inst_t sin;
|
||||
hal_pin_inst_t msin;
|
||||
hal_pin_inst_t sin2;
|
||||
hal_pin_inst_t msin2;
|
||||
hal_pin_inst_t sin3;
|
||||
hal_pin_inst_t msin3;
|
||||
hal_pin_inst_t square;
|
||||
hal_pin_inst_t vel;
|
||||
hal_pin_inst_t res;
|
||||
hal_pin_inst_t offset;
|
||||
};
|
||||
|
||||
struct term_pin_ctx_t{ // found in shared/comps/term.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t wave[8];
|
||||
hal_pin_inst_t offset[8];
|
||||
hal_pin_inst_t gain[8];
|
||||
hal_pin_inst_t send_step;
|
||||
hal_pin_inst_t con;
|
||||
};
|
||||
|
||||
struct curpid_pin_ctx_t{ // found in shared/comps/curpid.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t en;
|
||||
hal_pin_inst_t cmd_mode;
|
||||
hal_pin_inst_t id_cmd;
|
||||
hal_pin_inst_t iq_cmd;
|
||||
hal_pin_inst_t id_fb;
|
||||
hal_pin_inst_t iq_fb;
|
||||
hal_pin_inst_t ac_current;
|
||||
hal_pin_inst_t ud;
|
||||
hal_pin_inst_t uq;
|
||||
hal_pin_inst_t max_cur;
|
||||
hal_pin_inst_t pwm_volt;
|
||||
hal_pin_inst_t rd;
|
||||
hal_pin_inst_t rq;
|
||||
hal_pin_inst_t ld;
|
||||
hal_pin_inst_t lq;
|
||||
hal_pin_inst_t psi;
|
||||
hal_pin_inst_t ff;
|
||||
hal_pin_inst_t kp;
|
||||
hal_pin_inst_t ki;
|
||||
hal_pin_inst_t kind;
|
||||
hal_pin_inst_t vel;
|
||||
hal_pin_inst_t id_error;
|
||||
hal_pin_inst_t iq_error;
|
||||
};
|
||||
|
||||
struct svm_pin_ctx_t{ // found in shared/comps/svm.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t u;
|
||||
hal_pin_inst_t v;
|
||||
hal_pin_inst_t w;
|
||||
hal_pin_inst_t udc;
|
||||
hal_pin_inst_t su;
|
||||
hal_pin_inst_t sv;
|
||||
hal_pin_inst_t sw;
|
||||
hal_pin_inst_t cmode;
|
||||
hal_pin_inst_t mode;
|
||||
hal_pin_inst_t enu;
|
||||
hal_pin_inst_t env;
|
||||
hal_pin_inst_t enw;
|
||||
};
|
||||
|
||||
struct dq_pin_ctx_t{ // found in shared/comps/dq.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t mode;
|
||||
hal_pin_inst_t u;
|
||||
hal_pin_inst_t v;
|
||||
hal_pin_inst_t w;
|
||||
hal_pin_inst_t pos;
|
||||
hal_pin_inst_t polecount;
|
||||
hal_pin_inst_t a;
|
||||
hal_pin_inst_t b;
|
||||
hal_pin_inst_t y;
|
||||
hal_pin_inst_t d;
|
||||
hal_pin_inst_t q;
|
||||
};
|
||||
|
||||
struct idq_pin_ctx_t{ // found in shared/comps/idq.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t mode;
|
||||
hal_pin_inst_t d;
|
||||
hal_pin_inst_t q;
|
||||
hal_pin_inst_t pos;
|
||||
hal_pin_inst_t polecount;
|
||||
hal_pin_inst_t a;
|
||||
hal_pin_inst_t b;
|
||||
hal_pin_inst_t u;
|
||||
hal_pin_inst_t v;
|
||||
hal_pin_inst_t w;
|
||||
};
|
||||
|
||||
struct pole_pin_ctx_t{ // found in shared/comps/pole.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t pos;
|
||||
hal_pin_inst_t cpos;
|
||||
hal_pin_inst_t p;
|
||||
};
|
||||
|
||||
struct map_pin_ctx_t{ // found in shared/comps/map.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t pos_in;
|
||||
hal_pin_inst_t pos_out;
|
||||
hal_pin_inst_t pos_out2;
|
||||
hal_pin_inst_t start;
|
||||
hal_pin_inst_t freq;
|
||||
hal_pin_inst_t over;
|
||||
hal_pin_inst_t print;
|
||||
hal_pin_inst_t state;
|
||||
hal_pin_inst_t counter;
|
||||
hal_pin_inst_t index;
|
||||
hal_pin_inst_t m[50];
|
||||
};
|
||||
|
||||
struct vel_pin_ctx_t{ // found in shared/comps/vel.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t pos_in;
|
||||
hal_pin_inst_t pos_out;
|
||||
hal_pin_inst_t vel;
|
||||
hal_pin_inst_t acc;
|
||||
hal_pin_inst_t w;
|
||||
hal_pin_inst_t d;
|
||||
hal_pin_inst_t g;
|
||||
hal_pin_inst_t h;
|
||||
hal_pin_inst_t j;
|
||||
hal_pin_inst_t lp;
|
||||
hal_pin_inst_t torque;
|
||||
hal_pin_inst_t vel_ff;
|
||||
hal_pin_inst_t en;
|
||||
hal_pin_inst_t pos_error;
|
||||
};
|
||||
|
||||
struct rl_pin_ctx_t{ // found in shared/comps/rl.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t ra;
|
||||
hal_pin_inst_t rb;
|
||||
hal_pin_inst_t ld;
|
||||
hal_pin_inst_t lq;
|
||||
hal_pin_inst_t la;
|
||||
hal_pin_inst_t lb;
|
||||
hal_pin_inst_t max_cur;
|
||||
hal_pin_inst_t udc;
|
||||
hal_pin_inst_t start;
|
||||
hal_pin_inst_t state;
|
||||
hal_pin_inst_t ki;
|
||||
hal_pin_inst_t time;
|
||||
hal_pin_inst_t t;
|
||||
hal_pin_inst_t ia_fb;
|
||||
hal_pin_inst_t ib_fb;
|
||||
hal_pin_inst_t ua_fb;
|
||||
hal_pin_inst_t ub_fb;
|
||||
hal_pin_inst_t ua;
|
||||
hal_pin_inst_t ub;
|
||||
};
|
||||
|
||||
struct ypid_pin_ctx_t{ // found in shared/comps/ypid.c
|
||||
hal_pin_inst_t rt_prio;
|
||||
hal_pin_inst_t frt_prio;
|
||||
hal_pin_inst_t pos_ext_cmd;
|
||||
hal_pin_inst_t pos_fb;
|
||||
hal_pin_inst_t pos_error;
|
||||
hal_pin_inst_t vel_ext_cmd;
|
||||
hal_pin_inst_t vel_fb;
|
||||
hal_pin_inst_t vel_cmd;
|
||||
hal_pin_inst_t vel_error;
|
||||
hal_pin_inst_t vel_min;
|
||||
hal_pin_inst_t enable;
|
||||
hal_pin_inst_t out;
|
||||
hal_pin_inst_t pos_p;
|
||||
hal_pin_inst_t vel_p;
|
||||
hal_pin_inst_t vel_i;
|
||||
hal_pin_inst_t vel_ff;
|
||||
hal_pin_inst_t max_vel;
|
||||
hal_pin_inst_t max_acc;
|
||||
hal_pin_inst_t max_out;
|
||||
hal_pin_inst_t vel_sat;
|
||||
hal_pin_inst_t out_sat;
|
||||
hal_pin_inst_t saturated;
|
||||
};
|
||||
|
||||
extern const hal_comp_t * comps[];
|
||||
extern const pin_t pins[];
|
||||
extern const uint32_t comp_count;
|
||||
extern const uint32_t pin_count;
|
||||
|
||||
extern const hal_comp_t hv_comp_struct; // found in stmsp/stm32f303/src/comps/hv.c
|
||||
extern const hal_comp_t io_comp_struct; // found in stmsp/stm32f303/src/comps/io.c
|
||||
extern const hal_comp_t tle_comp_struct; // found in stmsp/stm32f303/src/comps/tle.c
|
||||
extern const hal_comp_t sim_comp_struct; // found in shared/comps/sim.c
|
||||
extern const hal_comp_t term_comp_struct; // found in shared/comps/term.c
|
||||
extern const hal_comp_t curpid_comp_struct; // found in shared/comps/curpid.c
|
||||
extern const hal_comp_t svm_comp_struct; // found in shared/comps/svm.c
|
||||
extern const hal_comp_t dq_comp_struct; // found in shared/comps/dq.c
|
||||
extern const hal_comp_t idq_comp_struct; // found in shared/comps/idq.c
|
||||
extern const hal_comp_t pole_comp_struct; // found in shared/comps/pole.c
|
||||
extern const hal_comp_t map_comp_struct; // found in shared/comps/map.c
|
||||
extern const hal_comp_t vel_comp_struct; // found in shared/comps/vel.c
|
||||
extern const hal_comp_t rl_comp_struct; // found in shared/comps/rl.c
|
||||
extern const hal_comp_t ypid_comp_struct; // found in shared/comps/ypid.c
|
||||
67
stmsp/stm32f303/inc/main.h
Normal file
67
stmsp/stm32f303/inc/main.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* File Name : main.h
|
||||
* Description : This file contains the common defines of the application
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __MAIN_H
|
||||
#define __MAIN_H
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* __MAIN_H */
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
92
stmsp/stm32f303/inc/opamp.h
Normal file
92
stmsp/stm32f303/inc/opamp.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* File Name : OPAMP.h
|
||||
* Description : This file provides code for the configuration
|
||||
* of the OPAMP instances.
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __opamp_H
|
||||
#define __opamp_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern OPAMP_HandleTypeDef hopamp1;
|
||||
extern OPAMP_HandleTypeDef hopamp2;
|
||||
extern OPAMP_HandleTypeDef hopamp3;
|
||||
extern OPAMP_HandleTypeDef hopamp4;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
extern void Error_Handler(void);
|
||||
|
||||
void MX_OPAMP1_Init(void);
|
||||
void MX_OPAMP2_Init(void);
|
||||
void MX_OPAMP3_Init(void);
|
||||
void MX_OPAMP4_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /*__ opamp_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
340
stmsp/stm32f303/inc/stm32f3xx_hal_conf.h
Normal file
340
stmsp/stm32f303/inc/stm32f3xx_hal_conf.h
Normal file
@@ -0,0 +1,340 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f3xx_hal_conf.h
|
||||
* @brief HAL configuration file.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F3xx_HAL_CONF_H
|
||||
#define __STM32F3xx_HAL_CONF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "main.h"
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/* ########################## Module Selection ############################## */
|
||||
/**
|
||||
* @brief This is the list of modules to be used in the HAL driver
|
||||
*/
|
||||
|
||||
#define HAL_MODULE_ENABLED
|
||||
#define HAL_ADC_MODULE_ENABLED
|
||||
/*#define HAL_CAN_MODULE_ENABLED */
|
||||
/*#define HAL_CEC_MODULE_ENABLED */
|
||||
/*#define HAL_NAND_MODULE_ENABLED */
|
||||
/*#define HAL_NOR_MODULE_ENABLED */
|
||||
/*#define HAL_PCCARD_MODULE_ENABLED */
|
||||
/*#define HAL_SRAM_MODULE_ENABLED */
|
||||
/*#define HAL_HRTIM_MODULE_ENABLED */
|
||||
#define HAL_OPAMP_MODULE_ENABLED
|
||||
/*#define HAL_SDADC_MODULE_ENABLED */
|
||||
/*#define HAL_TSC_MODULE_ENABLED */
|
||||
/*#define HAL_COMP_MODULE_ENABLED */
|
||||
#define HAL_CRC_MODULE_ENABLED
|
||||
/*#define HAL_CRYP_MODULE_ENABLED */
|
||||
#define HAL_DAC_MODULE_ENABLED
|
||||
/*#define HAL_I2S_MODULE_ENABLED */
|
||||
/*#define HAL_IWDG_MODULE_ENABLED */
|
||||
/*#define HAL_LCD_MODULE_ENABLED */
|
||||
/*#define HAL_LPTIM_MODULE_ENABLED */
|
||||
/*#define HAL_RNG_MODULE_ENABLED */
|
||||
/*#define HAL_RTC_MODULE_ENABLED */
|
||||
#define HAL_SPI_MODULE_ENABLED
|
||||
#define HAL_TIM_MODULE_ENABLED
|
||||
#define HAL_UART_MODULE_ENABLED
|
||||
/*#define HAL_USART_MODULE_ENABLED */
|
||||
/*#define HAL_IRDA_MODULE_ENABLED */
|
||||
/*#define HAL_SMARTCARD_MODULE_ENABLED */
|
||||
/*#define HAL_SMBUS_MODULE_ENABLED */
|
||||
/*#define HAL_WWDG_MODULE_ENABLED */
|
||||
#define HAL_PCD_MODULE_ENABLED
|
||||
#define HAL_GPIO_MODULE_ENABLED
|
||||
#define HAL_DMA_MODULE_ENABLED
|
||||
#define HAL_RCC_MODULE_ENABLED
|
||||
#define HAL_FLASH_MODULE_ENABLED
|
||||
// #define HAL_PWR_MODULE_ENABLED
|
||||
#define HAL_CORTEX_MODULE_ENABLED
|
||||
// #define HAL_I2C_MODULE_ENABLED
|
||||
/* ########################## HSE/HSI Values adaptation ##################### */
|
||||
/**
|
||||
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
|
||||
* This value is used by the RCC HAL module to compute the system frequency
|
||||
* (when HSE is used as system clock source, directly or through the PLL).
|
||||
*/
|
||||
#if !defined(HSE_VALUE)
|
||||
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
||||
#endif /* HSE_VALUE */
|
||||
|
||||
/**
|
||||
* @brief In the following line adjust the External High Speed oscillator (HSE) Startup
|
||||
* Timeout value
|
||||
*/
|
||||
#if !defined(HSE_STARTUP_TIMEOUT)
|
||||
#define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
|
||||
#endif /* HSE_STARTUP_TIMEOUT */
|
||||
|
||||
/**
|
||||
* @brief Internal High Speed oscillator (HSI) value.
|
||||
* This value is used by the RCC HAL module to compute the system frequency
|
||||
* (when HSI is used as system clock source, directly or through the PLL).
|
||||
*/
|
||||
#if !defined(HSI_VALUE)
|
||||
#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/
|
||||
#endif /* HSI_VALUE */
|
||||
|
||||
/**
|
||||
* @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup
|
||||
* Timeout value
|
||||
*/
|
||||
#if !defined(HSI_STARTUP_TIMEOUT)
|
||||
#define HSI_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSI start up */
|
||||
#endif /* HSI_STARTUP_TIMEOUT */
|
||||
|
||||
/**
|
||||
* @brief Internal Low Speed oscillator (LSI) value.
|
||||
*/
|
||||
#if !defined(LSI_VALUE)
|
||||
#define LSI_VALUE ((uint32_t)40000)
|
||||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz \
|
||||
The real value may vary depending on the variations \
|
||||
in voltage and temperature. */
|
||||
/**
|
||||
* @brief External Low Speed oscillator (LSE) value.
|
||||
*/
|
||||
#if !defined(LSE_VALUE)
|
||||
#define LSE_VALUE ((uint32_t)32768) /*!< Value of the External Low Speed oscillator in Hz */
|
||||
#endif /* LSE_VALUE */
|
||||
|
||||
/**
|
||||
* @brief Time out for LSE start up value in ms.
|
||||
*/
|
||||
#if !defined(LSE_STARTUP_TIMEOUT)
|
||||
#define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */
|
||||
#endif /* LSE_STARTUP_TIMEOUT */
|
||||
|
||||
/**
|
||||
* @brief External clock source for I2S peripheral
|
||||
* This value is used by the I2S HAL module to compute the I2S clock source
|
||||
* frequency, this source is inserted directly through I2S_CKIN pad.
|
||||
* - External clock generated through external PLL component on EVAL 303 (based on MCO or crystal)
|
||||
* - External clock not generated on EVAL 373
|
||||
*/
|
||||
#if !defined(EXTERNAL_CLOCK_VALUE)
|
||||
#define EXTERNAL_CLOCK_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/
|
||||
#endif /* EXTERNAL_CLOCK_VALUE */
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
||||
=== you can define the HSE value in your toolchain compiler preprocessor. */
|
||||
|
||||
/* ########################### System Configuration ######################### */
|
||||
/**
|
||||
* @brief This is the HAL system configuration section
|
||||
*/
|
||||
|
||||
#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */
|
||||
#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */
|
||||
#define USE_RTOS 0
|
||||
#define PREFETCH_ENABLE 1
|
||||
#define INSTRUCTION_CACHE_ENABLE 0
|
||||
#define DATA_CACHE_ENABLE 0
|
||||
|
||||
/* ########################## Assert Selection ############################## */
|
||||
/**
|
||||
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
||||
* HAL drivers code
|
||||
*/
|
||||
/* #define USE_FULL_ASSERT 1 */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Include module's header file
|
||||
*/
|
||||
|
||||
#ifdef HAL_RCC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_rcc.h"
|
||||
#endif /* HAL_RCC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_gpio.h"
|
||||
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DMA_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_dma.h"
|
||||
#endif /* HAL_DMA_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_cortex.h"
|
||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_ADC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_adc.h"
|
||||
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CAN_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_can.h"
|
||||
#endif /* HAL_CAN_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CEC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_cec.h"
|
||||
#endif /* HAL_CEC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_COMP_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_comp.h"
|
||||
#endif /* HAL_COMP_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CRC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_crc.h"
|
||||
#endif /* HAL_CRC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DAC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_dac.h"
|
||||
#endif /* HAL_DAC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_flash.h"
|
||||
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SRAM_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_sram.h"
|
||||
#endif /* HAL_SRAM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_NOR_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_nor.h"
|
||||
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_NAND_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_nand.h"
|
||||
#endif /* HAL_NAND_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_PCCARD_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_pccard.h"
|
||||
#endif /* HAL_PCCARD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_HRTIM_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_hrtim.h"
|
||||
#endif /* HAL_HRTIM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_I2C_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_i2c.h"
|
||||
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_I2S_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_i2s.h"
|
||||
#endif /* HAL_I2S_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_IRDA_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_irda.h"
|
||||
#endif /* HAL_IRDA_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_IWDG_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_iwdg.h"
|
||||
#endif /* HAL_IWDG_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_OPAMP_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_opamp.h"
|
||||
#endif /* HAL_OPAMP_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_PCD_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_pcd.h"
|
||||
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_PWR_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_pwr.h"
|
||||
#endif /* HAL_PWR_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_RTC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_rtc.h"
|
||||
#endif /* HAL_RTC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SDADC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_sdadc.h"
|
||||
#endif /* HAL_SDADC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_smartcard.h"
|
||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SMBUS_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_smbus.h"
|
||||
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SPI_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_spi.h"
|
||||
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_TIM_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_tim.h"
|
||||
#endif /* HAL_TIM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_TSC_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_tsc.h"
|
||||
#endif /* HAL_TSC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_UART_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_uart.h"
|
||||
#endif /* HAL_UART_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_USART_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_usart.h"
|
||||
#endif /* HAL_USART_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_WWDG_MODULE_ENABLED
|
||||
#include "stm32f3xx_hal_wwdg.h"
|
||||
#endif /* HAL_WWDG_MODULE_ENABLED */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/**
|
||||
* @brief The assert_param macro is used for function's parameters check.
|
||||
* @param expr: If expr is false, it calls assert_failed function
|
||||
* which reports the name of the source file and the source
|
||||
* line number of the call that failed.
|
||||
* If expr is true, it returns no value.
|
||||
* @retval None
|
||||
*/
|
||||
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void assert_failed(uint8_t *file, uint32_t line);
|
||||
#else
|
||||
#define assert_param(expr) ((void)0)
|
||||
#endif /* USE_FULL_ASSERT */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32F3xx_HAL_CONF_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
63
stmsp/stm32f303/inc/stm32f3xx_it.h
Normal file
63
stmsp/stm32f303/inc/stm32f3xx_it.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f3xx_it.h
|
||||
* @brief This file contains the headers of the interrupt handlers.
|
||||
******************************************************************************
|
||||
*
|
||||
* COPYRIGHT(c) 2016 STMicroelectronics
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F3xx_IT_H
|
||||
#define __STM32F3xx_IT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
void NMI_Handler(void);
|
||||
void HardFault_Handler(void);
|
||||
void MemManage_Handler(void);
|
||||
void BusFault_Handler(void);
|
||||
void UsageFault_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void USB_LP_CAN_RX0_IRQHandler(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32F3xx_IT_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
49
stmsp/stm32f303/inc/stmsp_f3hw.h
Normal file
49
stmsp/stm32f303/inc/stmsp_f3hw.h
Normal file
@@ -0,0 +1,49 @@
|
||||
//stmbl
|
||||
#define AREF 3.3 // analog reference voltage
|
||||
|
||||
#define VDIVUP 20000.0 * 2.0 //HV div pullup R1,R12
|
||||
#define VDIVDOWN 1000.0 //HV div pulldown R2,R9
|
||||
#define SHUNT 0.013 //shunt
|
||||
#define SHUNT_PULLUP 3900.0
|
||||
#define SHUNT_SERIE 120.0
|
||||
|
||||
#define LED_Pin GPIO_PIN_13
|
||||
#define LED_GPIO_Port GPIOC
|
||||
|
||||
#define PWM_DEADTIME 0
|
||||
#define PWM_FREQ 100000.0
|
||||
#define PWM_RES ((int32_t)(72000000.0 * 2.0 / PWM_FREQ / 2.0))
|
||||
#define RT_FREQ 5000.0
|
||||
#define ADC_OVER (PWM_FREQ * 2 / RT_FREQ)
|
||||
#define ADC_COUNT (ADC_OVER * 4)
|
||||
|
||||
#define USB_CONNECT_PIN GPIO_PIN_2
|
||||
#define USB_CONNECT_PORT GPIOB
|
||||
|
||||
#define USB_TERM 1
|
||||
|
||||
/*
|
||||
//otter
|
||||
//TODO: swap v,w cur feedback
|
||||
#define PWM_INVERT
|
||||
#define AREF 3.3// analog reference voltage
|
||||
|
||||
#define VDIVUP 56000.0//HV div pullup R1,R12
|
||||
#define VDIVDOWN 2000.0//HV div pulldown R2,R9
|
||||
#define SHUNT 0.003//shunt
|
||||
#define SHUNT_PULLUP 5100.0
|
||||
#define SHUNT_SERIE 100.0
|
||||
|
||||
#define LED_Pin GPIO_PIN_0
|
||||
#define LED_GPIO_Port GPIOA
|
||||
|
||||
#define PWM_U TIM8->CCR1
|
||||
#define PWM_V TIM8->CCR2
|
||||
#define PWM_W TIM8->CCR3
|
||||
|
||||
//ottercontrol
|
||||
#define USB_DISCONNECT_PIN GPIO_PIN_13
|
||||
#define USB_DISCONNECT_PORT GPIOC
|
||||
|
||||
#define PWM_DEADTIME 50
|
||||
*/
|
||||
74
stmsp/stm32f303/inc/usb_device.h
Normal file
74
stmsp/stm32f303/inc/usb_device.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : USB_DEVICE
|
||||
* @version : v1.0_Cube
|
||||
* @brief : Header for usb_device file.
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __usb_device_H
|
||||
#define __usb_device_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f3xx.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "usbd_def.h"
|
||||
|
||||
extern USBD_HandleTypeDef hUsbDeviceFS;
|
||||
|
||||
/* USB_Device init function */
|
||||
void MX_USB_DEVICE_Init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /*__usb_device_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
13
stmsp/stm32f303/inc/usbd_cdc_if.h
Normal file
13
stmsp/stm32f303/inc/usbd_cdc_if.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
#include "usbd_cdc.h"
|
||||
|
||||
extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS;
|
||||
uint8_t CDC_Transmit_FS(uint8_t *Buf, uint16_t Len);
|
||||
|
||||
|
||||
//void cdc_init(void);
|
||||
int cdc_tx(void *data, uint32_t len);
|
||||
int cdc_getline(char *ptr, int len);
|
||||
int cdc_is_connected();
|
||||
void cdc_poll();
|
||||
185
stmsp/stm32f303/inc/usbd_conf.h
Normal file
185
stmsp/stm32f303/inc/usbd_conf.h
Normal file
@@ -0,0 +1,185 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : usbd_conf.h
|
||||
* @version : v1.0_Cube
|
||||
* @brief : Header for usbd_conf file.
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USBD_CONF__H__
|
||||
#define __USBD_CONF__H__
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "stm32f3xx.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "usbd_def.h"
|
||||
|
||||
/** @addtogroup USBD_OTG_DRIVER
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_CONF
|
||||
* @brief usb otg low level driver configuration file
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_CONF_Exported_Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*---------- -----------*/
|
||||
#define USBD_MAX_NUM_INTERFACES 1
|
||||
/*---------- -----------*/
|
||||
#define USBD_MAX_NUM_CONFIGURATION 1
|
||||
/*---------- -----------*/
|
||||
#define USBD_MAX_STR_DESC_SIZ 512
|
||||
/*---------- -----------*/
|
||||
#define USBD_SUPPORT_USER_STRING 0
|
||||
/*---------- -----------*/
|
||||
#define USBD_DEBUG_LEVEL 0
|
||||
/*---------- -----------*/
|
||||
#define USBD_SELF_POWERED 1
|
||||
/*---------- -----------*/
|
||||
#define USBD_CDC_INTERVAL 1000
|
||||
/****************************************/
|
||||
/* #define for FS and HS identification */
|
||||
#define DEVICE_FS 0
|
||||
|
||||
/** @defgroup USBD_Exported_Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Memory management macros */
|
||||
#define USBD_malloc (uint32_t *)USBD_static_malloc
|
||||
#define USBD_free USBD_static_free
|
||||
#define USBD_memset /* Not used */
|
||||
#define USBD_memcpy /* Not used */
|
||||
|
||||
#define USBD_Delay HAL_Delay
|
||||
|
||||
/* For footprint reasons and since only one allocation is handled in the HID class
|
||||
driver, the malloc/free is changed into a static allocation method */
|
||||
void *USBD_static_malloc(uint32_t size);
|
||||
void USBD_static_free(void *p);
|
||||
|
||||
/* DEBUG macros */
|
||||
#if(USBD_DEBUG_LEVEL > 0)
|
||||
#define USBD_UsrLog(...) \
|
||||
printf(__VA_ARGS__); \
|
||||
printf("\n");
|
||||
#else
|
||||
#define USBD_UsrLog(...)
|
||||
#endif
|
||||
|
||||
|
||||
#if(USBD_DEBUG_LEVEL > 1)
|
||||
|
||||
#define USBD_ErrLog(...) \
|
||||
printf("ERROR: "); \
|
||||
printf(__VA_ARGS__); \
|
||||
printf("\n");
|
||||
#else
|
||||
#define USBD_ErrLog(...)
|
||||
#endif
|
||||
|
||||
|
||||
#if(USBD_DEBUG_LEVEL > 2)
|
||||
#define USBD_DbgLog(...) \
|
||||
printf("DEBUG : "); \
|
||||
printf(__VA_ARGS__); \
|
||||
printf("\n");
|
||||
#else
|
||||
#define USBD_DbgLog(...)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_CONF_Exported_Types
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_CONF_Exported_Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_CONF_Exported_Variables
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_CONF_Exported_FunctionsPrototype
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*__USBD_CONF__H__*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
114
stmsp/stm32f303/inc/usbd_desc.h
Normal file
114
stmsp/stm32f303/inc/usbd_desc.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : usbd_desc.h
|
||||
* @version : v1.0_Cube
|
||||
* @brief : Header for usbd_desc file.
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USBD_DESC__H__
|
||||
#define __USBD_DESC__H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usbd_def.h"
|
||||
|
||||
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_DESC
|
||||
* @brief general defines for the usb device library file
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USB_DESC_Exported_Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Exported_TypesDefinitions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Exported_Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Exported_Variables
|
||||
* @{
|
||||
*/
|
||||
extern USBD_DescriptorsTypeDef FS_Desc;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Exported_FunctionsPrototype
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __USBD_DESC_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
417
stmsp/stm32f303/src/adc.c
Normal file
417
stmsp/stm32f303/src/adc.c
Normal file
@@ -0,0 +1,417 @@
|
||||
/*
|
||||
* This file is part of the stmbl project.
|
||||
*
|
||||
* Copyright (C) 2013-2017 Rene Hopf <renehopf@mac.com>
|
||||
* Copyright (C) 2013-2017 Nico Stute <crinq@crinq.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "adc.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
ADC_HandleTypeDef hadc1;
|
||||
ADC_HandleTypeDef hadc2;
|
||||
ADC_HandleTypeDef hadc3;
|
||||
ADC_HandleTypeDef hadc4;
|
||||
|
||||
/* ADC1 init function */
|
||||
void MX_ADC1_Init(void) {
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
|
||||
/**Common config
|
||||
*/
|
||||
hadc1.Instance = ADC1;
|
||||
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
||||
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
||||
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc1.Init.ContinuousConvMode = DISABLE;
|
||||
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc1.Init.NbrOfDiscConversion = 1;
|
||||
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
||||
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO2;
|
||||
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc1.Init.NbrOfConversion = 4;
|
||||
hadc1.Init.DMAContinuousRequests = DISABLE;
|
||||
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||
hadc1.Init.LowPowerAutoWait = DISABLE;
|
||||
hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
||||
if(HAL_ADC_Init(&hadc1) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Channel = ADC_CHANNEL_1; // pa0 = dclink
|
||||
sConfig.Rank = 1;
|
||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_61CYCLES_5;
|
||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||
sConfig.Offset = 0;
|
||||
if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 2;
|
||||
sConfig.Channel = ADC_CHANNEL_4; // pa3 = bemf0
|
||||
if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 3;
|
||||
sConfig.Channel = ADC_CHANNEL_3; // pa2 = in0
|
||||
if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 4;
|
||||
sConfig.Channel = ADC_CHANNEL_2; // pa1 = temp
|
||||
if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
/* ADC2 init function */
|
||||
void MX_ADC2_Init(void) {
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
// ADC_MultiModeTypeDef multimode;
|
||||
|
||||
/**Common config
|
||||
*/
|
||||
hadc2.Instance = ADC2;
|
||||
hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
||||
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
|
||||
hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc2.Init.ContinuousConvMode = DISABLE;
|
||||
hadc2.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc2.Init.NbrOfDiscConversion = 1;
|
||||
hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
||||
hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO2;
|
||||
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc2.Init.NbrOfConversion = 4;
|
||||
hadc2.Init.DMAContinuousRequests = DISABLE;
|
||||
hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||
hadc2.Init.LowPowerAutoWait = DISABLE;
|
||||
hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
||||
if(HAL_ADC_Init(&hadc2) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Channel = ADC_CHANNEL_3; // pa6 = opamp2_out = shunt low
|
||||
sConfig.Rank = 1;
|
||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_61CYCLES_5;
|
||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||
sConfig.Offset = 0;
|
||||
if(HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 2;
|
||||
sConfig.Channel = ADC_CHANNEL_1; // pa4 = bemf1
|
||||
if(HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 3;
|
||||
sConfig.Channel = ADC_CHANNEL_2; // pa5 = in1
|
||||
if(HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 4;
|
||||
sConfig.Channel = ADC_CHANNEL_3; // pa6 = opamp2_out = shunt low
|
||||
if(HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
/* ADC3 init function */
|
||||
void MX_ADC3_Init(void) {
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
|
||||
/**Common config
|
||||
*/
|
||||
hadc3.Instance = ADC3;
|
||||
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
||||
hadc3.Init.Resolution = ADC_RESOLUTION_12B;
|
||||
hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc3.Init.ContinuousConvMode = DISABLE;
|
||||
hadc3.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc3.Init.NbrOfDiscConversion = 1;
|
||||
hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
||||
hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO2;
|
||||
hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc3.Init.NbrOfConversion = 4;
|
||||
hadc3.Init.DMAContinuousRequests = DISABLE;
|
||||
hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||
hadc3.Init.LowPowerAutoWait = DISABLE;
|
||||
hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
||||
if(HAL_ADC_Init(&hadc3) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = ADC_CHANNEL_1; // pb1 = opamp3_out = shunt a
|
||||
sConfig.Rank = 1;
|
||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_61CYCLES_5;
|
||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||
sConfig.Offset = 0;
|
||||
if(HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 2;
|
||||
if(HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 3;
|
||||
if(HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 4;
|
||||
if(HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
/* ADC4 init function */
|
||||
void MX_ADC4_Init(void) {
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
// ADC_MultiModeTypeDef multimode;
|
||||
|
||||
/**Common config
|
||||
*/
|
||||
hadc4.Instance = ADC4;
|
||||
hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
||||
hadc4.Init.Resolution = ADC_RESOLUTION_12B;
|
||||
hadc4.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc4.Init.ContinuousConvMode = DISABLE;
|
||||
hadc4.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc4.Init.NbrOfDiscConversion = 1;
|
||||
hadc4.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
|
||||
hadc4.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO2;
|
||||
hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc4.Init.NbrOfConversion = 4;
|
||||
hadc4.Init.DMAContinuousRequests = DISABLE;
|
||||
hadc4.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||
hadc4.Init.LowPowerAutoWait = DISABLE;
|
||||
hadc4.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
||||
if(HAL_ADC_Init(&hadc4) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Channel = ADC_CHANNEL_3; // pb12 = shunt b
|
||||
sConfig.Rank = 1;
|
||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_61CYCLES_5;
|
||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||
sConfig.Offset = 0;
|
||||
if(HAL_ADC_ConfigChannel(&hadc4, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 2;
|
||||
if(HAL_ADC_ConfigChannel(&hadc4, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 3;
|
||||
if(HAL_ADC_ConfigChannel(&hadc4, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sConfig.Rank = 4;
|
||||
if(HAL_ADC_ConfigChannel(&hadc4, &sConfig) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t HAL_RCC_ADC12_CLK_ENABLED = 0;
|
||||
static uint32_t HAL_RCC_ADC34_CLK_ENABLED = 0;
|
||||
|
||||
void HAL_ADC_MspInit(ADC_HandleTypeDef *adcHandle) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
if(adcHandle->Instance == ADC1) {
|
||||
/* USER CODE BEGIN ADC1_MspInit 0 */
|
||||
|
||||
/* USER CODE END ADC1_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
HAL_RCC_ADC12_CLK_ENABLED++;
|
||||
if(HAL_RCC_ADC12_CLK_ENABLED == 1) {
|
||||
__HAL_RCC_ADC12_CLK_ENABLE();
|
||||
}
|
||||
|
||||
/**ADC1 GPIO Configuration
|
||||
PA0 ------> ADC1_IN1
|
||||
PA1 ------> ADC1_IN2
|
||||
PA2 ------> ADC1_IN3
|
||||
PA3 ------> ADC1_IN4
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN ADC1_MspInit 1 */
|
||||
|
||||
/* USER CODE END ADC1_MspInit 1 */
|
||||
} else if(adcHandle->Instance == ADC2) {
|
||||
/* USER CODE BEGIN ADC2_MspInit 0 */
|
||||
|
||||
/* USER CODE END ADC2_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
HAL_RCC_ADC12_CLK_ENABLED++;
|
||||
if(HAL_RCC_ADC12_CLK_ENABLED == 1) {
|
||||
__HAL_RCC_ADC12_CLK_ENABLE();
|
||||
}
|
||||
|
||||
/**ADC2 GPIO Configuration
|
||||
PA4 ------> ADC2_IN1
|
||||
PA5 ------> ADC2_IN2
|
||||
PA6 ------> ADC2_IN3
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN ADC2_MspInit 1 */
|
||||
|
||||
/* USER CODE END ADC2_MspInit 1 */
|
||||
} else if(adcHandle->Instance == ADC3) {
|
||||
/* USER CODE BEGIN ADC3_MspInit 0 */
|
||||
|
||||
/* USER CODE END ADC3_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
HAL_RCC_ADC34_CLK_ENABLED++;
|
||||
if(HAL_RCC_ADC34_CLK_ENABLED == 1) {
|
||||
__HAL_RCC_ADC34_CLK_ENABLE();
|
||||
}
|
||||
|
||||
/**ADC3 GPIO Configuration
|
||||
PB1 ------> ADC3_IN1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN ADC3_MspInit 1 */
|
||||
|
||||
/* USER CODE END ADC3_MspInit 1 */
|
||||
} else if(adcHandle->Instance == ADC4) {
|
||||
/* USER CODE BEGIN ADC4_MspInit 0 */
|
||||
|
||||
/* USER CODE END ADC4_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
HAL_RCC_ADC34_CLK_ENABLED++;
|
||||
if(HAL_RCC_ADC34_CLK_ENABLED == 1) {
|
||||
__HAL_RCC_ADC34_CLK_ENABLE();
|
||||
}
|
||||
|
||||
/**ADC4 GPIO Configuration
|
||||
PB12 ------> ADC4_IN3
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_12;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN ADC4_MspInit 1 */
|
||||
|
||||
/* USER CODE END ADC4_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_ADC_MspDeInit(ADC_HandleTypeDef *adcHandle) {
|
||||
if(adcHandle->Instance == ADC1) {
|
||||
/* USER CODE BEGIN ADC1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END ADC1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
HAL_RCC_ADC12_CLK_ENABLED--;
|
||||
if(HAL_RCC_ADC12_CLK_ENABLED == 0) {
|
||||
__HAL_RCC_ADC12_CLK_DISABLE();
|
||||
}
|
||||
|
||||
/**ADC1 GPIO Configuration
|
||||
PA3 ------> ADC1_IN4
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
|
||||
|
||||
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END ADC1_MspDeInit 1 */
|
||||
} else if(adcHandle->Instance == ADC2) {
|
||||
/* USER CODE BEGIN ADC2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END ADC2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
HAL_RCC_ADC12_CLK_ENABLED--;
|
||||
if(HAL_RCC_ADC12_CLK_ENABLED == 0) {
|
||||
__HAL_RCC_ADC12_CLK_DISABLE();
|
||||
}
|
||||
|
||||
/**ADC2 GPIO Configuration
|
||||
PA4 ------> ADC2_IN1
|
||||
PA5 ------> ADC2_IN2
|
||||
PA6 ------> ADC2_IN3
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6);
|
||||
|
||||
/* USER CODE BEGIN ADC2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END ADC2_MspDeInit 1 */
|
||||
} else if(adcHandle->Instance == ADC3) {
|
||||
/* USER CODE BEGIN ADC3_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END ADC3_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
HAL_RCC_ADC34_CLK_ENABLED--;
|
||||
if(HAL_RCC_ADC34_CLK_ENABLED == 0) {
|
||||
__HAL_RCC_ADC34_CLK_DISABLE();
|
||||
}
|
||||
|
||||
/**ADC3 GPIO Configuration
|
||||
PB1 ------> ADC3_IN1
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1);
|
||||
|
||||
/* USER CODE BEGIN ADC3_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END ADC3_MspDeInit 1 */
|
||||
} else if(adcHandle->Instance == ADC4) {
|
||||
/* USER CODE BEGIN ADC4_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END ADC4_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
HAL_RCC_ADC34_CLK_ENABLED--;
|
||||
if(HAL_RCC_ADC34_CLK_ENABLED == 0) {
|
||||
__HAL_RCC_ADC34_CLK_DISABLE();
|
||||
}
|
||||
|
||||
/**ADC4 GPIO Configuration
|
||||
PB12 ------> ADC4_IN3
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12);
|
||||
|
||||
/* USER CODE BEGIN ADC4_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END ADC4_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
102
stmsp/stm32f303/src/comps/hv.c
Normal file
102
stmsp/stm32f303/src/comps/hv.c
Normal file
@@ -0,0 +1,102 @@
|
||||
#include "commands.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
#include "stmsp_f3hw.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
|
||||
HAL_COMP(hv);
|
||||
|
||||
//U V W input
|
||||
HAL_PIN(a);
|
||||
HAL_PIN(b);
|
||||
|
||||
HAL_PIN(a_fb);
|
||||
HAL_PIN(b_fb);
|
||||
|
||||
//dclink input
|
||||
HAL_PIN(udc);
|
||||
|
||||
HAL_PIN(hv_temp);
|
||||
|
||||
//enable in
|
||||
HAL_PIN(en);
|
||||
|
||||
//TODO: half bridge enable in
|
||||
HAL_PIN(ena);
|
||||
HAL_PIN(enb);
|
||||
|
||||
//fault output
|
||||
HAL_PIN(fault);
|
||||
|
||||
HAL_PIN(min_on); // min on time [s]
|
||||
HAL_PIN(min_off); // min off time [s]
|
||||
|
||||
static void nrt_init(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct hv_ctx_t * ctx = (struct hv_ctx_t *)ctx_ptr;
|
||||
struct hv_pin_ctx_t *pins = (struct hv_pin_ctx_t *)pin_ptr;
|
||||
PIN(ena) = 1.0;
|
||||
PIN(enb) = 1.0;
|
||||
PIN(min_on) = 0.000001;
|
||||
PIN(min_off) = 0.000001;
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
//enable
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_15;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct hv_ctx_t * ctx = (struct hv_ctx_t *)ctx_ptr;
|
||||
struct hv_pin_ctx_t *pins = (struct hv_pin_ctx_t *)pin_ptr;
|
||||
|
||||
float udc = MAX(PIN(udc), 0.1);
|
||||
//convert voltages to PWM output compare values
|
||||
int32_t a = (int32_t)(PIN(a) / udc * PWM_RES / 2.0) + PWM_RES / 2;
|
||||
int32_t b = (int32_t)(PIN(b) / udc * PWM_RES / 2.0) + PWM_RES / 2;
|
||||
|
||||
//convert on and off times to PWM output compare values
|
||||
int32_t min = (int32_t)(PWM_RES * RT_FREQ * PIN(min_on) + 0.5);
|
||||
int32_t min_off = (int32_t)(PWM_RES * RT_FREQ * PIN(min_off) + 0.5);
|
||||
|
||||
a = CLAMP(a, min, PWM_RES - min_off);
|
||||
b = CLAMP(b, min, PWM_RES - min_off);
|
||||
|
||||
TIM1->CCR1 = a;
|
||||
TIM1->CCR2 = b;
|
||||
// GPIOC->BSRR |= GPIO_PIN_15 << 16;
|
||||
|
||||
PIN(a_fb) = (a - PWM_RES / 2.0) * 2.0 * udc / PWM_RES;
|
||||
PIN(b_fb) = (b - PWM_RES / 2.0) * 2.0 * udc / PWM_RES;
|
||||
|
||||
if(PIN(udc) < 52.0 && PIN(hv_temp) < 100.0 && PIN(en) > 0.0) {
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, PIN(enb) > 0.0 ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, PIN(ena) > 0.0 ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
||||
} else {
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
hal_comp_t hv_comp_struct = {
|
||||
.name = "hv",
|
||||
.nrt = 0,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.nrt_init = nrt_init,
|
||||
.rt_start = 0,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = 0,
|
||||
.pin_count = sizeof(struct hv_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
207
stmsp/stm32f303/src/comps/io.c
Normal file
207
stmsp/stm32f303/src/comps/io.c
Normal file
@@ -0,0 +1,207 @@
|
||||
#include "commands.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "stmsp_f3hw.h"
|
||||
|
||||
HAL_COMP(io);
|
||||
|
||||
HAL_PIN(led);
|
||||
|
||||
HAL_PIN(oc1);
|
||||
HAL_PIN(oc2);
|
||||
HAL_PIN(ena);
|
||||
HAL_PIN(enb);
|
||||
|
||||
HAL_PIN(hv_temp);
|
||||
HAL_PIN(dc_link);
|
||||
HAL_PIN(bemf0);
|
||||
HAL_PIN(bemf1);
|
||||
HAL_PIN(in0);
|
||||
HAL_PIN(in1);
|
||||
HAL_PIN(iap);
|
||||
HAL_PIN(ian);
|
||||
HAL_PIN(ibp);
|
||||
HAL_PIN(ibn);
|
||||
HAL_PIN(ip);
|
||||
HAL_PIN(in);
|
||||
HAL_PIN(ia);
|
||||
HAL_PIN(ib);
|
||||
|
||||
// uint32_t adc_12_buf[80];
|
||||
// uint32_t adc_34_buf[80];
|
||||
|
||||
#pragma pack(1)
|
||||
struct adc_12_t {
|
||||
uint16_t dc_link;
|
||||
uint16_t shunt_low0;
|
||||
uint16_t bemf0;
|
||||
uint16_t bemf1;
|
||||
uint16_t in0;
|
||||
uint16_t in1;
|
||||
uint16_t hv_temp;
|
||||
uint16_t shunt_low1;
|
||||
};
|
||||
|
||||
#pragma pack(1)
|
||||
struct adc_34_t {
|
||||
uint16_t shunt_a0;
|
||||
uint16_t shunt_b0;
|
||||
uint16_t shunt_a1;
|
||||
uint16_t shunt_b1;
|
||||
uint16_t shunt_a2;
|
||||
uint16_t shunt_b2;
|
||||
uint16_t shunt_a3;
|
||||
uint16_t shunt_b3;
|
||||
};
|
||||
|
||||
volatile struct adc_12_t adc_12_buf[(uint32_t)ADC_OVER];
|
||||
volatile struct adc_34_t adc_34_buf[(uint32_t)ADC_OVER];
|
||||
|
||||
struct io_ctx_t {
|
||||
float u_offset;
|
||||
float v_offset;
|
||||
float w_offset;
|
||||
};
|
||||
|
||||
#define ARES 4096.0 // analog resolution, 12 bit
|
||||
#define ADC(a) ((a) / ARES * AREF)
|
||||
|
||||
#define HV_TEMP_PULLUP 1000
|
||||
#define HV_R(a) (HV_TEMP_PULLUP / (AREF / (a)-1))
|
||||
|
||||
#define MOT_TEMP_PULLUP 10000
|
||||
#define MOT_TEMP_PULLMID 51000
|
||||
#define MOT_TEMP_PULLDOWN 10000
|
||||
#define MOT_TEMP_REF 15.26
|
||||
#define MOT_REF(a) ((a) * (MOT_TEMP_PULLMID + MOT_TEMP_PULLDOWN) / MOT_TEMP_PULLDOWN)
|
||||
#define MOT_R(a) (MOT_TEMP_PULLUP / (MOT_TEMP_REF / (a)-1))
|
||||
|
||||
#define ARES 4096.0 // analog resolution, 12 bit
|
||||
|
||||
#define VOLT(a) ((a) / (ARES) * (AREF) / (VDIVDOWN) * ((VDIVUP) + (VDIVDOWN)))
|
||||
//#define TEMP(a) (log10f((a) * (AREF) / (ARES) * (TPULLUP) / ((AREF) - (a) * (AREF) / (ARES))) * (-53.0) + 290.0)
|
||||
|
||||
#define SHUNT_GAIN 8.0
|
||||
|
||||
#define AMP(a, gain) (((a)*AREF / ARES / (gain)-AREF / (SHUNT_PULLUP + SHUNT_SERIE) * SHUNT_SERIE) / (SHUNT * SHUNT_PULLUP) * (SHUNT_PULLUP + SHUNT_SERIE))
|
||||
|
||||
|
||||
float r2temp(float r) {
|
||||
r = r / 1000;
|
||||
const int step = 5;
|
||||
const int start = -10;
|
||||
//-10..100
|
||||
const float temp[] = {21.377,16.869,13.411,10.735,8.653,7.018,5.726,4.700,3.879,3.219,2.685,2.250,1.895,1.604,1.363,1.163,0.996,0.857,0.740,0.641,0.558,0.487,0.426,0.375,0.330,0.292,0.259,0.230};//{271.7, 158.2, 95.23, 59.07, 37.64, 24.59, 16.43, 11.21, 7.798, 5.518, 3.972, 2.902};
|
||||
for(int i = 1; i < ARRAY_SIZE(temp); i++) {
|
||||
if(temp[i] < r) {
|
||||
float a = temp[i - 1];
|
||||
float b = temp[i];
|
||||
return (-(r - b) / (a - b) * step + i * step + start);
|
||||
}
|
||||
}
|
||||
return (temp[ARRAY_SIZE(temp) - 1] + step);
|
||||
}
|
||||
|
||||
static void nrt_init(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct io_ctx_t * ctx = (struct io_ctx_t *)ctx_ptr;
|
||||
// struct io_pin_ctx_t * pins = (struct io_pin_ctx_t *)pin_ptr;
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
// GPIO_InitStruct.Pin = LED_Pin | GPIO_PIN_14 | GPIO_PIN_15;
|
||||
// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
// GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
// HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
DMA1_Channel1->CCR &= (uint16_t)(~DMA_CCR_EN);
|
||||
DMA1_Channel1->CPAR = (uint32_t) & (ADC12_COMMON->CDR);
|
||||
DMA1_Channel1->CMAR = (uint32_t)adc_12_buf;
|
||||
DMA1_Channel1->CNDTR = ADC_COUNT;
|
||||
DMA1_Channel1->CCR = DMA_CCR_MINC | DMA_CCR_PL_0 | DMA_CCR_MSIZE_1 | DMA_CCR_PSIZE_1 | DMA_CCR_CIRC;
|
||||
ADC1->CFGR |= ADC_CFGR_DMAEN | ADC_CFGR_DMACFG;
|
||||
DMA1_Channel1->CCR |= DMA_CCR_TCIE;
|
||||
DMA1_Channel1->CCR |= DMA_CCR_EN;
|
||||
|
||||
// ADC12_COMMON->CCR |= ADC12_CCR_MDMA_1;
|
||||
|
||||
DMA2_Channel5->CCR &= (uint16_t)(~DMA_CCR_EN);
|
||||
DMA2_Channel5->CPAR = (uint32_t) & (ADC34_COMMON->CDR);
|
||||
DMA2_Channel5->CMAR = (uint32_t)adc_34_buf;
|
||||
DMA2_Channel5->CNDTR = ADC_COUNT;
|
||||
DMA2_Channel5->CCR = DMA_CCR_MINC | DMA_CCR_PL_0 | DMA_CCR_MSIZE_1 | DMA_CCR_PSIZE_1 | DMA_CCR_CIRC;
|
||||
ADC3->CFGR |= ADC_CFGR_DMAEN | ADC_CFGR_DMACFG;
|
||||
DMA2_Channel5->CCR |= DMA_CCR_EN;
|
||||
|
||||
// ADC34_COMMON->CCR |= ADC34_CCR_MDMA_1;
|
||||
}
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct io_ctx_t *ctx = (struct io_ctx_t *)ctx_ptr;
|
||||
struct io_pin_ctx_t *pins = (struct io_pin_ctx_t *)pin_ptr;
|
||||
|
||||
uint32_t dc_link = 0;
|
||||
uint32_t hv_temp = 0;
|
||||
uint32_t bemf0 = 0;
|
||||
uint32_t bemf1 = 0;
|
||||
uint32_t in0 = 0;
|
||||
uint32_t in1 = 0;
|
||||
uint32_t iap = 0;
|
||||
uint32_t ian = 0;
|
||||
uint32_t ibp = 0;
|
||||
uint32_t ibn = 0;
|
||||
// uint32_t ip = 0;
|
||||
// uint32_t in = 0;
|
||||
|
||||
for(int i = 0; i < ADC_OVER / 2; i++) {
|
||||
dc_link += adc_12_buf[2 * i].dc_link + adc_12_buf[2 * i + 1].dc_link;
|
||||
hv_temp += adc_12_buf[2 * i].hv_temp + adc_12_buf[2 * i + 1].hv_temp;
|
||||
in0 += adc_12_buf[2 * i].in0 + adc_12_buf[2 * i + 1].in0;
|
||||
in1 += adc_12_buf[2 * i].in1 + adc_12_buf[2 * i + 1].in1;
|
||||
bemf0 += adc_12_buf[2 * i].bemf0 + adc_12_buf[2 * i + 1].bemf0;
|
||||
bemf1 += adc_12_buf[2 * i].bemf1 + adc_12_buf[2 * i + 1].bemf1;
|
||||
ian += adc_34_buf[2 * i].shunt_a0;// + adc_34_buf[2 * i].shunt_a1 + adc_34_buf[2 * i].shunt_a2 + adc_34_buf[2 * i].shunt_a3;
|
||||
iap += adc_34_buf[2 * i + 1].shunt_a0;// + adc_34_buf[2 * i + 1].shunt_a1 + adc_34_buf[2 * i + 1].shunt_a2 + adc_34_buf[2 * i + 1].shunt_a3;
|
||||
ibn += adc_34_buf[2 * i].shunt_b0;// + adc_34_buf[2 * i].shunt_b1 + adc_34_buf[2 * i].shunt_b2 + adc_34_buf[2 * i].shunt_b3;
|
||||
ibp += adc_34_buf[2 * i + 1].shunt_b0;// + adc_34_buf[2 * i + 1].shunt_b1 + adc_34_buf[2 * i + 1].shunt_b2 + adc_34_buf[2 * i + 1].shunt_b3;
|
||||
// in += adc_12_buf[2 * i].shunt_low0;// + adc_12_buf[2 * i].shunt_low1;
|
||||
// ip += adc_12_buf[2 * i + 1].shunt_low0;// + adc_12_buf[2 * i + 1].shunt_low1;
|
||||
}
|
||||
|
||||
PIN(hv_temp) = r2temp(HV_R(ADC(hv_temp / ADC_OVER)));
|
||||
PIN(dc_link) = ADC(dc_link / ADC_OVER) * (20.0 + 1.0) / 1.0;
|
||||
PIN(bemf0) = ADC(bemf0 / ADC_OVER) * (20.0 + 1.0) / 1.0;
|
||||
PIN(bemf1) = ADC(bemf1 / ADC_OVER) * (20.0 + 1.0) / 1.0;
|
||||
PIN(in0) = ADC(in0 / ADC_OVER) * (10.0 + 1.5) / 1.5;
|
||||
PIN(in1) = ADC(in1 / ADC_OVER) * (10.0 + 1.5) / 1.5;
|
||||
|
||||
PIN(iap) = AMP(iap * 2.0 / ADC_OVER, 8.0);
|
||||
PIN(ian) = AMP(ian * 2.0 / ADC_OVER, 8.0);
|
||||
PIN(ibp) = AMP(ibp * 2.0 / ADC_OVER, 8.0);
|
||||
PIN(ibn) = AMP(ibn * 2.0 / ADC_OVER, 8.0);
|
||||
// PIN(ip) = ADC(ip / ADC_OVER);
|
||||
// PIN(in) = ADC(in / ADC_OVER);;
|
||||
PIN(ia) = (PIN(iap) - PIN(ian)) / 2.0;
|
||||
PIN(ib) = (PIN(ibp) - PIN(ibn)) / 2.0;
|
||||
|
||||
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, PIN(led) > 0.0 ? GPIO_PIN_SET : GPIO_PIN_RESET); // 0.1u
|
||||
}
|
||||
|
||||
static void nrt_func(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
}
|
||||
|
||||
hal_comp_t io_comp_struct = {
|
||||
.name = "io",
|
||||
.nrt = nrt_func,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.nrt_init = nrt_init,
|
||||
.rt_start = 0,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = sizeof(struct io_ctx_t),
|
||||
.pin_count = sizeof(struct io_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
184
stmsp/stm32f303/src/comps/tle.c
Normal file
184
stmsp/stm32f303/src/comps/tle.c
Normal file
@@ -0,0 +1,184 @@
|
||||
//driver for TLE5012 GMR-Based Angular Sensor
|
||||
#include "commands.h"
|
||||
#include "hal.h"
|
||||
#include "math.h"
|
||||
#include "defines.h"
|
||||
#include "angle.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
|
||||
HAL_COMP(tle);
|
||||
|
||||
HAL_PIN(pos);
|
||||
HAL_PIN(error);
|
||||
|
||||
SPI_HandleTypeDef hspi1;
|
||||
|
||||
#pragma pack(1)
|
||||
typedef union {
|
||||
struct {
|
||||
uint16_t nd : 4; //4-bit Number of data words
|
||||
uint16_t addr : 6; //6-bit Address
|
||||
uint16_t upd : 1; //Update register access 0: Access to current values 1: Access to updated values
|
||||
uint16_t lock : 4; //4-bit lock value 0000B: Default operating access for addresses 0x00:0x04, 1010B: Config-access for addresses 0x05:0x11
|
||||
uint16_t rw : 1; //Read-write 0:Write 1:Read
|
||||
};
|
||||
uint16_t word;
|
||||
} tle_cmd_t;
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
uint8_t crc : 8; //Cyclic Redundancy Check
|
||||
uint8_t resp : 4; //Sensor number response indicator
|
||||
uint8_t angle_valid : 1; //Valid angle value 1: Angle value valid
|
||||
uint8_t if_err : 1; //interface error 1: No error
|
||||
uint8_t sys_err : 1; //system error 1: No error
|
||||
uint8_t rst : 1; //Indication of chip reset 0: Reset occurred 1: No reset
|
||||
};
|
||||
uint16_t word;
|
||||
} tle_safety_t;
|
||||
//TODO: alles hier drunter drehen
|
||||
typedef union {
|
||||
struct {
|
||||
uint8_t rd_st : 1; //Read Status
|
||||
uint8_t s_nr : 2; //Slave Number
|
||||
uint8_t no_gmr_a : 1; //No valid GMR Angle Value
|
||||
uint8_t no_gmr_xy : 1; //No valid GMR XY Values
|
||||
uint8_t s_rom : 1; //Status ROM
|
||||
uint8_t s_adct : 1; //Status ADC-Test
|
||||
uint8_t res : 1; //reserved
|
||||
uint8_t s_magol : 1; //Status Magnitude Out of Limit
|
||||
uint8_t s_xyol : 1; //Status X,Y Data Out of Limit
|
||||
uint8_t s_ov : 1; //Status Overflow
|
||||
uint8_t s_dspu : 1; //Status Digital Signal Processing Unit
|
||||
uint8_t s_fuse : 1; //Status Fuse CRC
|
||||
uint8_t s_vr : 1; //Status Voltage Regulator
|
||||
uint8_t s_wd : 1; //Status Watchdog
|
||||
uint8_t s_rst : 1; //Status Reset
|
||||
};
|
||||
uint16_t word;
|
||||
} tle_reg_stat_t;
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
uint8_t res1 : 6; //Reserved
|
||||
uint8_t as_adct : 1; //Enable ADC Testvector Check
|
||||
uint8_t res2 : 1; //Reserved
|
||||
uint8_t as_vec_mag : 1; //Activation of Magnitude Check
|
||||
uint8_t as_vec_xy : 1; //Activation of X,Y out of limit Check
|
||||
uint8_t as_ov : 1; //Enable of DSPU Overflow Check
|
||||
uint8_t as_dspu : 1; //Activation DSPU BIST
|
||||
uint8_t as_fuse : 1; //Activation Fuse CRC
|
||||
uint8_t as_vr : 1; //Enable Voltage Regulator Check
|
||||
uint8_t as_wd : 1; //Enable DSPU Watchdog-HW-Reset
|
||||
uint8_t as_rst : 1; //Activation of Hardware Reset
|
||||
};
|
||||
uint16_t word;
|
||||
} tle_reg_acstat_t;
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
uint8_t fir_md : 2; //Filter Decimation Setting (Update Rate Setting)
|
||||
uint16_t res : 9; //Reserved
|
||||
uint8_t clk_sel : 1; //Clock Source Select
|
||||
uint8_t ssc_od : 1; //SSC Interface 0: Push-pull 1: Open drain
|
||||
uint8_t dsp_hold : 1; //Hold DSPU Operation
|
||||
uint8_t iif_mod : 2; //Incremental Interface Mode
|
||||
};
|
||||
uint16_t word;
|
||||
} tle_reg_mod1_t;
|
||||
|
||||
#define TLE_REG_STAT 0x00 //Status Register
|
||||
#define TLE_REG_ACSTAT 0x01 //Activation Status Register
|
||||
#define TLE_REG_AVAL 0x02 //Angle Value Register
|
||||
#define TLE_REG_ASPD 0x03 //Angle Speed Register
|
||||
#define TLE_REG_AREV 0x04 //Angle Revolution Register
|
||||
#define TLE_REG_FSYNC 0x05 //Frame Synchronization Register
|
||||
#define TLE_REG_MOD_1 0x06 //Interface Mode1 Register
|
||||
#define TLE_REG_SIL 0x07 //SIL Register
|
||||
#define TLE_REG_MOD_2 0x08 //Interface Mode2 Register
|
||||
#define TLE_REG_MOD_3 0x09 //Interface Mode3 Register
|
||||
#define TLE_REG_OFFX 0x0A //Offset X
|
||||
#define TLE_REG_OFFY 0x0B //Offset Y
|
||||
#define TLE_REG_SYNCH 0x0C //Synchronicity
|
||||
#define TLE_REG_IFAB 0x0D //IFAB Register
|
||||
#define TLE_REG_MOD_4 0x0E //Interface Mode4 Register
|
||||
#define TLE_REG_TCO_Y 0x0F //Temperature Coefficient Register
|
||||
#define TLE_REG_ADC_X 0x10 //X-raw value
|
||||
#define TLE_REG_ADC_Y 0x11 //Y-raw value
|
||||
#define TLE_REG_CNT 0x20 //IIF Counter value
|
||||
|
||||
static void hw_init(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct tle_ctx_t * ctx = (struct tle_ctx_t *)ctx_ptr;
|
||||
// struct tle_pin_ctx_t *pins = (struct tle_pin_ctx_t *)pin_ptr;
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_SPI1_CLK_ENABLE();
|
||||
|
||||
/**SPI1 GPIO Configuration
|
||||
PB3 ------> SPI1_SCK
|
||||
PB5 ------> SPI1_MOSI
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_5;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PA15 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_15;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
|
||||
|
||||
hspi1.Instance = SPI1;
|
||||
hspi1.Init.Mode = SPI_MODE_MASTER;
|
||||
hspi1.Init.Direction = SPI_DIRECTION_1LINE;
|
||||
hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
|
||||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI_BAUDRATEPRESCALER_64;//1.125 Mhz
|
||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
hspi1.Init.CRCPolynomial = 7;
|
||||
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
|
||||
hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
|
||||
HAL_SPI_Init(&hspi1);
|
||||
}
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
// struct tle_ctx_t * ctx = (struct tle_ctx_t *)ctx_ptr;
|
||||
struct tle_pin_ctx_t *pins = (struct tle_pin_ctx_t *)pin_ptr;
|
||||
uint16_t buf[10];
|
||||
tle_cmd_t tle_cmd;
|
||||
tle_safety_t tle_safety;
|
||||
tle_cmd.word = 0x0000;
|
||||
tle_cmd.rw = 1;
|
||||
tle_cmd.addr = 2;
|
||||
tle_cmd.nd = 1;
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
|
||||
HAL_SPI_Transmit(&hspi1, (uint8_t *)&tle_cmd.word, 1, 100);
|
||||
HAL_SPI_Receive(&hspi1, (uint8_t *)buf, tle_cmd.nd + 1, 100);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
|
||||
PIN(pos) = (float)((buf[0] & 0x7fff) - 0x4000) / 16384.0 * 2 * M_PI - M_PI;
|
||||
tle_safety.word = buf[1];
|
||||
PIN(error) = !tle_safety.angle_valid;
|
||||
}
|
||||
|
||||
hal_comp_t tle_comp_struct = {
|
||||
.name = "tle",
|
||||
.nrt = 0,
|
||||
.rt = rt_func,
|
||||
.frt = 0,
|
||||
.hw_init = hw_init,
|
||||
.rt_start = 0,
|
||||
.frt_start = 0,
|
||||
.rt_stop = 0,
|
||||
.frt_stop = 0,
|
||||
.ctx_size = 0,
|
||||
.pin_count = sizeof(struct tle_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
||||
};
|
||||
312
stmsp/stm32f303/src/hal_tbl.c
Normal file
312
stmsp/stm32f303/src/hal_tbl.c
Normal file
@@ -0,0 +1,312 @@
|
||||
#include "hal.h"
|
||||
//generated by tools/create_hal_tbl.py DO NOT EDIT
|
||||
|
||||
const hal_comp_t * comps[] = {
|
||||
&hv_comp_struct, // found in stmsp/stm32f303/src/comps/hv.c
|
||||
&io_comp_struct, // found in stmsp/stm32f303/src/comps/io.c
|
||||
&tle_comp_struct, // found in stmsp/stm32f303/src/comps/tle.c
|
||||
&sim_comp_struct, // found in shared/comps/sim.c
|
||||
&term_comp_struct, // found in shared/comps/term.c
|
||||
&curpid_comp_struct, // found in shared/comps/curpid.c
|
||||
&svm_comp_struct, // found in shared/comps/svm.c
|
||||
&dq_comp_struct, // found in shared/comps/dq.c
|
||||
&idq_comp_struct, // found in shared/comps/idq.c
|
||||
&pole_comp_struct, // found in shared/comps/pole.c
|
||||
&map_comp_struct, // found in shared/comps/map.c
|
||||
&vel_comp_struct, // found in shared/comps/vel.c
|
||||
&rl_comp_struct, // found in shared/comps/rl.c
|
||||
&ypid_comp_struct, // found in shared/comps/ypid.c
|
||||
};
|
||||
|
||||
const uint32_t comp_count = sizeof(comps) / sizeof(comps[0]);
|
||||
|
||||
const pin_t pins[] = {
|
||||
// pins for comp hv found in stmsp/stm32f303/src/comps/hv.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"a",
|
||||
"b",
|
||||
"a_fb",
|
||||
"b_fb",
|
||||
"udc",
|
||||
"hv_temp",
|
||||
"en",
|
||||
"ena",
|
||||
"enb",
|
||||
"fault",
|
||||
"min_on",
|
||||
"min_off",
|
||||
// pins for comp io found in stmsp/stm32f303/src/comps/io.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"led",
|
||||
"oc1",
|
||||
"oc2",
|
||||
"ena",
|
||||
"enb",
|
||||
"hv_temp",
|
||||
"dc_link",
|
||||
"bemf0",
|
||||
"bemf1",
|
||||
"in0",
|
||||
"in1",
|
||||
"iap",
|
||||
"ian",
|
||||
"ibp",
|
||||
"ibn",
|
||||
"ip",
|
||||
"in",
|
||||
"ia",
|
||||
"ib",
|
||||
// pins for comp tle found in stmsp/stm32f303/src/comps/tle.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"pos",
|
||||
"error",
|
||||
// pins for comp sim found in shared/comps/sim.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"amp",
|
||||
"freq",
|
||||
"sin",
|
||||
"msin",
|
||||
"sin2",
|
||||
"msin2",
|
||||
"sin3",
|
||||
"msin3",
|
||||
"square",
|
||||
"vel",
|
||||
"res",
|
||||
"offset",
|
||||
// pins for comp term found in shared/comps/term.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"wave0",
|
||||
"wave1",
|
||||
"wave2",
|
||||
"wave3",
|
||||
"wave4",
|
||||
"wave5",
|
||||
"wave6",
|
||||
"wave7",
|
||||
"offset0",
|
||||
"offset1",
|
||||
"offset2",
|
||||
"offset3",
|
||||
"offset4",
|
||||
"offset5",
|
||||
"offset6",
|
||||
"offset7",
|
||||
"gain0",
|
||||
"gain1",
|
||||
"gain2",
|
||||
"gain3",
|
||||
"gain4",
|
||||
"gain5",
|
||||
"gain6",
|
||||
"gain7",
|
||||
"send_step",
|
||||
"con",
|
||||
// pins for comp curpid found in shared/comps/curpid.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"en",
|
||||
"cmd_mode",
|
||||
"id_cmd",
|
||||
"iq_cmd",
|
||||
"id_fb",
|
||||
"iq_fb",
|
||||
"ac_current",
|
||||
"ud",
|
||||
"uq",
|
||||
"max_cur",
|
||||
"pwm_volt",
|
||||
"rd",
|
||||
"rq",
|
||||
"ld",
|
||||
"lq",
|
||||
"psi",
|
||||
"ff",
|
||||
"kp",
|
||||
"ki",
|
||||
"kind",
|
||||
"vel",
|
||||
"id_error",
|
||||
"iq_error",
|
||||
// pins for comp svm found in shared/comps/svm.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"u",
|
||||
"v",
|
||||
"w",
|
||||
"udc",
|
||||
"su",
|
||||
"sv",
|
||||
"sw",
|
||||
"cmode",
|
||||
"mode",
|
||||
"enu",
|
||||
"env",
|
||||
"enw",
|
||||
// pins for comp dq found in shared/comps/dq.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"mode",
|
||||
"u",
|
||||
"v",
|
||||
"w",
|
||||
"pos",
|
||||
"polecount",
|
||||
"a",
|
||||
"b",
|
||||
"y",
|
||||
"d",
|
||||
"q",
|
||||
// pins for comp idq found in shared/comps/idq.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"mode",
|
||||
"d",
|
||||
"q",
|
||||
"pos",
|
||||
"polecount",
|
||||
"a",
|
||||
"b",
|
||||
"u",
|
||||
"v",
|
||||
"w",
|
||||
// pins for comp pole found in shared/comps/pole.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"pos",
|
||||
"cpos",
|
||||
"p",
|
||||
// pins for comp map found in shared/comps/map.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"pos_in",
|
||||
"pos_out",
|
||||
"pos_out2",
|
||||
"start",
|
||||
"freq",
|
||||
"over",
|
||||
"print",
|
||||
"state",
|
||||
"counter",
|
||||
"index",
|
||||
"m0",
|
||||
"m1",
|
||||
"m2",
|
||||
"m3",
|
||||
"m4",
|
||||
"m5",
|
||||
"m6",
|
||||
"m7",
|
||||
"m8",
|
||||
"m9",
|
||||
"m10",
|
||||
"m11",
|
||||
"m12",
|
||||
"m13",
|
||||
"m14",
|
||||
"m15",
|
||||
"m16",
|
||||
"m17",
|
||||
"m18",
|
||||
"m19",
|
||||
"m20",
|
||||
"m21",
|
||||
"m22",
|
||||
"m23",
|
||||
"m24",
|
||||
"m25",
|
||||
"m26",
|
||||
"m27",
|
||||
"m28",
|
||||
"m29",
|
||||
"m30",
|
||||
"m31",
|
||||
"m32",
|
||||
"m33",
|
||||
"m34",
|
||||
"m35",
|
||||
"m36",
|
||||
"m37",
|
||||
"m38",
|
||||
"m39",
|
||||
"m40",
|
||||
"m41",
|
||||
"m42",
|
||||
"m43",
|
||||
"m44",
|
||||
"m45",
|
||||
"m46",
|
||||
"m47",
|
||||
"m48",
|
||||
"m49",
|
||||
// pins for comp vel found in shared/comps/vel.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"pos_in",
|
||||
"pos_out",
|
||||
"vel",
|
||||
"acc",
|
||||
"w",
|
||||
"d",
|
||||
"g",
|
||||
"h",
|
||||
"j",
|
||||
"lp",
|
||||
"torque",
|
||||
"vel_ff",
|
||||
"en",
|
||||
"pos_error",
|
||||
// pins for comp rl found in shared/comps/rl.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"ra",
|
||||
"rb",
|
||||
"ld",
|
||||
"lq",
|
||||
"la",
|
||||
"lb",
|
||||
"max_cur",
|
||||
"udc",
|
||||
"start",
|
||||
"state",
|
||||
"ki",
|
||||
"time",
|
||||
"t",
|
||||
"ia_fb",
|
||||
"ib_fb",
|
||||
"ua_fb",
|
||||
"ub_fb",
|
||||
"ua",
|
||||
"ub",
|
||||
// pins for comp ypid found in shared/comps/ypid.c
|
||||
"rt_prio",
|
||||
"frt_prio",
|
||||
"pos_ext_cmd",
|
||||
"pos_fb",
|
||||
"pos_error",
|
||||
"vel_ext_cmd",
|
||||
"vel_fb",
|
||||
"vel_cmd",
|
||||
"vel_error",
|
||||
"vel_min",
|
||||
"enable",
|
||||
"out",
|
||||
"pos_p",
|
||||
"vel_p",
|
||||
"vel_i",
|
||||
"vel_ff",
|
||||
"max_vel",
|
||||
"max_acc",
|
||||
"max_out",
|
||||
"vel_sat",
|
||||
"out_sat",
|
||||
"saturated",
|
||||
};
|
||||
|
||||
const uint32_t pin_count = sizeof(pins) / sizeof(pins[0]);
|
||||
|
||||
560
stmsp/stm32f303/src/main.c
Normal file
560
stmsp/stm32f303/src/main.c
Normal file
File diff suppressed because it is too large
Load Diff
186
stmsp/stm32f303/src/opamp.c
Normal file
186
stmsp/stm32f303/src/opamp.c
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* This file is part of the stmbl project.
|
||||
*
|
||||
* Copyright (C) 2013-2017 Rene Hopf <renehopf@mac.com>
|
||||
* Copyright (C) 2013-2017 Nico Stute <crinq@crinq.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "opamp.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
OPAMP_HandleTypeDef hopamp2;
|
||||
OPAMP_HandleTypeDef hopamp3;
|
||||
OPAMP_HandleTypeDef hopamp4;
|
||||
|
||||
/* OPAMP2 init function */
|
||||
void MX_OPAMP2_Init(void) {
|
||||
hopamp2.Instance = OPAMP2;
|
||||
hopamp2.Init.Mode = OPAMP_PGA_MODE;
|
||||
hopamp2.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO0;
|
||||
hopamp2.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
||||
hopamp2.Init.PgaConnect = OPAMP_PGA_CONNECT_INVERTINGINPUT_NO;
|
||||
hopamp2.Init.PgaGain = OPAMP_PGA_GAIN_16;
|
||||
hopamp2.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
||||
if(HAL_OPAMP_Init(&hopamp2) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
/* OPAMP3 init function */
|
||||
void MX_OPAMP3_Init(void) {
|
||||
hopamp3.Instance = OPAMP3;
|
||||
hopamp3.Init.Mode = OPAMP_PGA_MODE;
|
||||
hopamp3.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO0;
|
||||
hopamp3.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
||||
hopamp3.Init.PgaConnect = OPAMP_PGA_CONNECT_INVERTINGINPUT_NO;
|
||||
hopamp3.Init.PgaGain = OPAMP_PGA_GAIN_16;
|
||||
hopamp3.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
||||
if(HAL_OPAMP_Init(&hopamp3) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
void MX_OPAMP4_Init(void) {
|
||||
hopamp4.Instance = OPAMP4;
|
||||
hopamp4.Init.Mode = OPAMP_PGA_MODE;
|
||||
hopamp4.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO3;
|
||||
hopamp4.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
|
||||
hopamp4.Init.PgaConnect = OPAMP_PGA_CONNECT_INVERTINGINPUT_NO;
|
||||
hopamp4.Init.PgaGain = OPAMP_PGA_GAIN_8;
|
||||
hopamp4.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
|
||||
if(HAL_OPAMP_Init(&hopamp4) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_OPAMP_MspInit(OPAMP_HandleTypeDef *opampHandle) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
if(opampHandle->Instance == OPAMP2) {
|
||||
/* USER CODE BEGIN OPAMP2_MspInit 0 */
|
||||
|
||||
/* USER CODE END OPAMP2_MspInit 0 */
|
||||
|
||||
/**OPAMP2 GPIO Configuration
|
||||
PA6 ------> OPAMP2_VOUT
|
||||
PA7 ------> OPAMP2_VINP
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN OPAMP2_MspInit 1 */
|
||||
|
||||
/* USER CODE END OPAMP2_MspInit 1 */
|
||||
} else if(opampHandle->Instance == OPAMP3) {
|
||||
/* USER CODE BEGIN OPAMP3_MspInit 0 */
|
||||
|
||||
/* USER CODE END OPAMP3_MspInit 0 */
|
||||
|
||||
/**OPAMP3 GPIO Configuration
|
||||
PB0 ------> OPAMP3_VINP
|
||||
PB1 ------> OPAMP3_VOUT
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN OPAMP3_MspInit 1 */
|
||||
|
||||
/* USER CODE END OPAMP3_MspInit 1 */
|
||||
} else if(opampHandle->Instance == OPAMP4) {
|
||||
/* USER CODE BEGIN OPAMP4_MspInit 0 */
|
||||
|
||||
/* USER CODE END OPAMP4_MspInit 0 */
|
||||
|
||||
/**OPAMP4 GPIO Configuration
|
||||
PB11 ------> OPAMP4_VINP
|
||||
PB12 ------> OPAMP4_VOUT
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN OPAMP4_MspInit 1 */
|
||||
|
||||
/* USER CODE END OPAMP4_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_OPAMP_MspDeInit(OPAMP_HandleTypeDef *opampHandle) {
|
||||
if(opampHandle->Instance == OPAMP2) {
|
||||
/* USER CODE BEGIN OPAMP2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END OPAMP2_MspDeInit 0 */
|
||||
|
||||
/**OPAMP2 GPIO Configuration
|
||||
PA6 ------> OPAMP2_VOUT
|
||||
PA7 ------> OPAMP2_VINP
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6 | GPIO_PIN_7);
|
||||
|
||||
/* USER CODE BEGIN OPAMP2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END OPAMP2_MspDeInit 1 */
|
||||
} else if(opampHandle->Instance == OPAMP3) {
|
||||
/* USER CODE BEGIN OPAMP3_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END OPAMP3_MspDeInit 0 */
|
||||
|
||||
/**OPAMP3 GPIO Configuration
|
||||
PB0 ------> OPAMP3_VINP
|
||||
PB1 ------> OPAMP3_VOUT
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0 | GPIO_PIN_1);
|
||||
|
||||
/* USER CODE BEGIN OPAMP3_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END OPAMP3_MspDeInit 1 */
|
||||
} else if(opampHandle->Instance == OPAMP4) {
|
||||
/* USER CODE BEGIN OPAMP3_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END OPAMP3_MspDeInit 0 */
|
||||
|
||||
/**OPAMP3 GPIO Configuration
|
||||
PB0 ------> OPAMP3_VINP
|
||||
PB1 ------> OPAMP3_VOUT
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11 | GPIO_PIN_12);
|
||||
|
||||
/* USER CODE BEGIN OPAMP3_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END OPAMP3_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
96
stmsp/stm32f303/src/stm32f3xx_hal_msp.c
Normal file
96
stmsp/stm32f303/src/stm32f3xx_hal_msp.c
Normal file
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* File Name : stm32f3xx_hal_msp.c
|
||||
* Description : This file provides code for the MSP Initialization
|
||||
* and de-Initialization codes.
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f3xx_hal.h"
|
||||
|
||||
extern void Error_Handler(void);
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void) {
|
||||
/* USER CODE BEGIN MspInit 0 */
|
||||
|
||||
/* USER CODE END MspInit 0 */
|
||||
|
||||
__HAL_RCC_SYSCFG_CLK_ENABLE();
|
||||
|
||||
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
|
||||
|
||||
/* System interrupt init*/
|
||||
/* MemoryManagement_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0);
|
||||
/* BusFault_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0);
|
||||
/* UsageFault_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0);
|
||||
/* SVCall_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0);
|
||||
/* DebugMonitor_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0);
|
||||
/* PendSV_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(PendSV_IRQn, 0, 0);
|
||||
/* SysTick_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(SysTick_IRQn, 14, 0);
|
||||
|
||||
/* USER CODE BEGIN MspInit 1 */
|
||||
|
||||
/* USER CODE END MspInit 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
177
stmsp/stm32f303/src/stm32f3xx_it.c
Normal file
177
stmsp/stm32f303/src/stm32f3xx_it.c
Normal file
@@ -0,0 +1,177 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f3xx_it.c
|
||||
* @brief Interrupt Service Routines.
|
||||
******************************************************************************
|
||||
*
|
||||
* COPYRIGHT(c) 2016 STMicroelectronics
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "stm32f3xx.h"
|
||||
#include "stm32f3xx_it.h"
|
||||
#include "hal.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
#ifdef USB_TERM
|
||||
extern PCD_HandleTypeDef hpcd_USB_FS;
|
||||
#endif
|
||||
/******************************************************************************/
|
||||
/* Cortex-M4 Processor Interruption and Exception Handlers */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles Non maskable interrupt.
|
||||
*/
|
||||
void NMI_Handler(void) {
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||
hal_error(NMI);
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);
|
||||
while(1){}
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard fault interrupt.
|
||||
*/
|
||||
void HardFault_Handler(void) {
|
||||
/* USER CODE BEGIN HardFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END HardFault_IRQn 0 */
|
||||
hal_error(HardFault);
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);
|
||||
while(1){}
|
||||
/* USER CODE BEGIN HardFault_IRQn 1 */
|
||||
|
||||
/* USER CODE END HardFault_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Memory management fault.
|
||||
*/
|
||||
void MemManage_Handler(void) {
|
||||
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
|
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 0 */
|
||||
hal_error(MemManage);
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);
|
||||
while(1){}
|
||||
/* USER CODE BEGIN MemoryManagement_IRQn 1 */
|
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Pre-fetch fault, memory access fault.
|
||||
*/
|
||||
void BusFault_Handler(void) {
|
||||
/* USER CODE BEGIN BusFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END BusFault_IRQn 0 */
|
||||
hal_error(BusFault);
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);
|
||||
while(1){}
|
||||
/* USER CODE BEGIN BusFault_IRQn 1 */
|
||||
|
||||
/* USER CODE END BusFault_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Undefined instruction or illegal state.
|
||||
*/
|
||||
void UsageFault_Handler(void) {
|
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END UsageFault_IRQn 0 */
|
||||
hal_error(UsageFault);
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);
|
||||
while(1){}
|
||||
/* USER CODE BEGIN UsageFault_IRQn 1 */
|
||||
|
||||
/* USER CODE END UsageFault_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug monitor.
|
||||
*/
|
||||
void DebugMon_Handler(void) {
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 1 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System tick timer.
|
||||
*/
|
||||
// void SysTick_Handler(void) {
|
||||
// /* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
|
||||
// /* USER CODE END SysTick_IRQn 0 */
|
||||
// HAL_IncTick();
|
||||
// HAL_SYSTICK_IRQHandler();
|
||||
// /* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
|
||||
// /* USER CODE END SysTick_IRQn 1 */
|
||||
// }
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32F3xx Peripheral Interrupt Handlers */
|
||||
/* Add here the Interrupt Handlers for the used peripherals. */
|
||||
/* For the available peripheral interrupt handler names, */
|
||||
/* please refer to the startup file (startup_stm32f3xx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles USB low priority or CAN_RX0 interrupts.
|
||||
*/
|
||||
void USB_LP_CAN_RX0_IRQHandler(void) {
|
||||
/* USER CODE BEGIN USB_LP_CAN_RX0_IRQn 0 */
|
||||
//GPIOA->BSRR |= GPIO_PIN_10;
|
||||
|
||||
/* USER CODE END USB_LP_CAN_RX0_IRQn 0 */
|
||||
#ifdef USB_TERM
|
||||
HAL_PCD_IRQHandler(&hpcd_USB_FS);
|
||||
#endif
|
||||
/* USER CODE BEGIN USB_LP_CAN_RX0_IRQn 1 */
|
||||
//GPIOA->BSRR |= GPIO_PIN_10 << 16;
|
||||
/* USER CODE END USB_LP_CAN_RX0_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
75
stmsp/stm32f303/src/usb_device.c
Normal file
75
stmsp/stm32f303/src/usb_device.c
Normal file
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : USB_DEVICE
|
||||
* @version : v1.0_Cube
|
||||
* @brief : This file implements the USB Device
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
|
||||
#include "usb_device.h"
|
||||
#include "usbd_core.h"
|
||||
#include "usbd_desc.h"
|
||||
#include "usbd_cdc.h"
|
||||
#include "usbd_cdc_if.h"
|
||||
|
||||
/* USB Device Core handle declaration */
|
||||
USBD_HandleTypeDef hUsbDeviceFS;
|
||||
|
||||
/* init function */
|
||||
void MX_USB_DEVICE_Init(void) {
|
||||
/* Init Device Library,Add Supported Class and Start the library*/
|
||||
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
|
||||
|
||||
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
|
||||
|
||||
USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
|
||||
|
||||
USBD_Start(&hUsbDeviceFS);
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
170
stmsp/stm32f303/src/usbd_cdc_if.c
Normal file
170
stmsp/stm32f303/src/usbd_cdc_if.c
Normal file
@@ -0,0 +1,170 @@
|
||||
#include "usbd_cdc_if.h"
|
||||
#include "ringbuf.h"
|
||||
#define RX_QUEUE_SIZE 1024
|
||||
#define TX_QUEUE_SIZE 4096
|
||||
|
||||
struct ringbuf rx_buf = RINGBUF(RX_QUEUE_SIZE);
|
||||
struct ringbuf tx_buf = RINGBUF(TX_QUEUE_SIZE);
|
||||
|
||||
#define APP_RX_DATA_SIZE 64
|
||||
#define APP_TX_DATA_SIZE 64
|
||||
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
|
||||
uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
|
||||
extern USBD_HandleTypeDef hUsbDeviceFS;
|
||||
|
||||
static int8_t CDC_Init_FS(void);
|
||||
static int8_t CDC_DeInit_FS(void);
|
||||
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t *pbuf, uint16_t length);
|
||||
static int8_t CDC_Receive_FS(uint8_t *pbuf, uint32_t *Len);
|
||||
|
||||
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
|
||||
{
|
||||
CDC_Init_FS,
|
||||
CDC_DeInit_FS,
|
||||
CDC_Control_FS,
|
||||
CDC_Receive_FS};
|
||||
|
||||
static int8_t CDC_Init_FS(void) {
|
||||
/* USER CODE BEGIN 3 */
|
||||
/* Set Application Buffers */
|
||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
|
||||
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
|
||||
return (USBD_OK);
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
||||
static int8_t CDC_DeInit_FS(void) {
|
||||
/* USER CODE BEGIN 4 */
|
||||
return (USBD_OK);
|
||||
/* USER CODE END 4 */
|
||||
}
|
||||
|
||||
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t *pbuf, uint16_t length) {
|
||||
/* USER CODE BEGIN 5 */
|
||||
switch(cmd) {
|
||||
case CDC_SEND_ENCAPSULATED_COMMAND:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_GET_ENCAPSULATED_RESPONSE:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_SET_COMM_FEATURE:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_GET_COMM_FEATURE:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_CLEAR_COMM_FEATURE:
|
||||
|
||||
break;
|
||||
|
||||
/*******************************************************************************/
|
||||
/* Line Coding Structure */
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* Offset | Field | Size | Value | Description */
|
||||
/* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
|
||||
/* 4 | bCharFormat | 1 | Number | Stop bits */
|
||||
/* 0 - 1 Stop bit */
|
||||
/* 1 - 1.5 Stop bits */
|
||||
/* 2 - 2 Stop bits */
|
||||
/* 5 | bParityType | 1 | Number | Parity */
|
||||
/* 0 - None */
|
||||
/* 1 - Odd */
|
||||
/* 2 - Even */
|
||||
/* 3 - Mark */
|
||||
/* 4 - Space */
|
||||
/* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
|
||||
/*******************************************************************************/
|
||||
case CDC_SET_LINE_CODING:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_GET_LINE_CODING:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_SET_CONTROL_LINE_STATE:
|
||||
|
||||
break;
|
||||
|
||||
case CDC_SEND_BREAK:
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (USBD_OK);
|
||||
/* USER CODE END 5 */
|
||||
}
|
||||
|
||||
static int8_t CDC_Receive_FS(uint8_t *Buf, uint32_t *Len) {
|
||||
/* USER CODE BEGIN 6 */
|
||||
rb_write(&rx_buf, Buf, *Len);
|
||||
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
|
||||
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
|
||||
return (USBD_OK);
|
||||
/* USER CODE END 6 */
|
||||
}
|
||||
|
||||
uint8_t CDC_Transmit_FS(uint8_t *Buf, uint16_t Len) {
|
||||
uint8_t result = USBD_OK;
|
||||
/* USER CODE BEGIN 7 */
|
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)hUsbDeviceFS.pClassData;
|
||||
if(hcdc->TxState != 0) {
|
||||
return USBD_BUSY;
|
||||
}
|
||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
|
||||
result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
||||
/* USER CODE END 7 */
|
||||
return result;
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
|
||||
void cdc_usbtx() {
|
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)hUsbDeviceFS.pClassData;
|
||||
if(hcdc->TxState != 0) {
|
||||
return; //busy
|
||||
}
|
||||
int len = rb_read(&tx_buf, UserTxBufferFS, sizeof(UserTxBufferFS));
|
||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, len);
|
||||
USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
||||
}
|
||||
|
||||
void cdc_poll() {
|
||||
if(cdc_is_connected()) {
|
||||
cdc_usbtx();
|
||||
}
|
||||
}
|
||||
|
||||
int cdc_is_connected() {
|
||||
if(hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
int cdc_tx(void *data, uint32_t len) {
|
||||
if(cdc_is_connected()) {
|
||||
int ret;
|
||||
ret = rb_write(&tx_buf, data, len);
|
||||
cdc_usbtx();
|
||||
return ret;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int cdc_getline(char *ptr, int len) {
|
||||
return rb_getline(&rx_buf, ptr, len);
|
||||
}
|
||||
|
||||
int _write(int file, char *ptr, int len) {
|
||||
return cdc_tx(ptr, len);
|
||||
}
|
||||
494
stmsp/stm32f303/src/usbd_conf.c
Normal file
494
stmsp/stm32f303/src/usbd_conf.c
Normal file
@@ -0,0 +1,494 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : usbd_conf.c
|
||||
* @version : v1.0_Cube
|
||||
* @brief : This file implements the board support package for the USB device library
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f3xx.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "usbd_def.h"
|
||||
#include "usbd_core.h"
|
||||
#include "usbd_cdc.h"
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
PCD_HandleTypeDef hpcd_USB_FS;
|
||||
void Error_Handler(void);
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 1 */
|
||||
/* USER CODE END 1 */
|
||||
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state);
|
||||
|
||||
/*******************************************************************************
|
||||
LL Driver Callbacks (PCD -> USB Device Library)
|
||||
*******************************************************************************/
|
||||
/* MSP Init */
|
||||
|
||||
void HAL_PCD_MspInit(PCD_HandleTypeDef *pcdHandle) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
if(pcdHandle->Instance == USB) {
|
||||
/* USER CODE BEGIN USB_MspInit 0 */
|
||||
|
||||
/* USER CODE END USB_MspInit 0 */
|
||||
|
||||
/**USB GPIO Configuration
|
||||
PA11 ------> USB_DM
|
||||
PA12 ------> USB_DP
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF14_USB;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_USB_CLK_ENABLE();
|
||||
|
||||
/* Peripheral interrupt init */
|
||||
HAL_NVIC_SetPriority(USB_LP_CAN_RX0_IRQn, 10, 0);
|
||||
HAL_NVIC_EnableIRQ(USB_LP_CAN_RX0_IRQn);
|
||||
/* USER CODE BEGIN USB_MspInit 1 */
|
||||
|
||||
/* USER CODE END USB_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *pcdHandle) {
|
||||
if(pcdHandle->Instance == USB) {
|
||||
/* USER CODE BEGIN USB_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END USB_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_USB_CLK_DISABLE();
|
||||
|
||||
/**USB GPIO Configuration
|
||||
PA11 ------> USB_DM
|
||||
PA12 ------> USB_DP
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11 | GPIO_PIN_12);
|
||||
|
||||
/* Peripheral interrupt Deinit*/
|
||||
HAL_NVIC_DisableIRQ(USB_LP_CAN_RX0_IRQn);
|
||||
|
||||
/* USER CODE BEGIN USB_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END USB_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Setup Stage callback
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) {
|
||||
USBD_LL_SetupStage((USBD_HandleTypeDef *)hpcd->pData, (uint8_t *)hpcd->Setup);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Data Out Stage callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @param epnum: Endpoint Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
|
||||
USBD_LL_DataOutStage((USBD_HandleTypeDef *)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Data In Stage callback..
|
||||
* @param hpcd: PCD handle
|
||||
* @param epnum: Endpoint Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
|
||||
USBD_LL_DataInStage((USBD_HandleTypeDef *)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SOF callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
|
||||
USBD_LL_SOF((USBD_HandleTypeDef *)hpcd->pData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) {
|
||||
USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
|
||||
|
||||
/*Set USB Current Speed*/
|
||||
switch(hpcd->Init.speed) {
|
||||
case PCD_SPEED_FULL:
|
||||
speed = USBD_SPEED_FULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
speed = USBD_SPEED_FULL;
|
||||
break;
|
||||
}
|
||||
USBD_LL_SetSpeed((USBD_HandleTypeDef *)hpcd->pData, speed);
|
||||
|
||||
/*Reset Device*/
|
||||
USBD_LL_Reset((USBD_HandleTypeDef *)hpcd->pData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Suspend callback.
|
||||
* When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it)
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) {
|
||||
/* Inform USB library that core enters in suspend Mode */
|
||||
USBD_LL_Suspend((USBD_HandleTypeDef *)hpcd->pData);
|
||||
/*Enter in STOP mode */
|
||||
/* USER CODE BEGIN 2 */
|
||||
if(hpcd->Init.low_power_enable) {
|
||||
/* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register */
|
||||
SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
|
||||
}
|
||||
/* USER CODE END 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Resume callback.
|
||||
* When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it)
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) {
|
||||
/* USER CODE BEGIN 3 */
|
||||
|
||||
/* USER CODE END 3 */
|
||||
USBD_LL_Resume((USBD_HandleTypeDef *)hpcd->pData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ISOOUTIncomplete callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @param epnum: Endpoint Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
|
||||
USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef *)hpcd->pData, epnum);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ISOINIncomplete callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @param epnum: Endpoint Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
|
||||
USBD_LL_IsoINIncomplete((USBD_HandleTypeDef *)hpcd->pData, epnum);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ConnectCallback callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) {
|
||||
USBD_LL_DevConnected((USBD_HandleTypeDef *)hpcd->pData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disconnect callback.
|
||||
* @param hpcd: PCD handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) {
|
||||
USBD_LL_DevDisconnected((USBD_HandleTypeDef *)hpcd->pData);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
LL Driver Interface (USB Device Library --> PCD)
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief Initializes the Low Level portion of the Device driver.
|
||||
* @param pdev: Device handle
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev) {
|
||||
/* Init USB_IP */
|
||||
/* Link The driver to the stack */
|
||||
hpcd_USB_FS.pData = pdev;
|
||||
pdev->pData = &hpcd_USB_FS;
|
||||
|
||||
hpcd_USB_FS.Instance = USB;
|
||||
hpcd_USB_FS.Init.dev_endpoints = 8;
|
||||
hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
|
||||
hpcd_USB_FS.Init.ep0_mps = DEP0CTL_MPS_64;
|
||||
hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
|
||||
hpcd_USB_FS.Init.low_power_enable = DISABLE;
|
||||
hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
|
||||
if(HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef *)pdev->pData, 0x00, PCD_SNG_BUF, 0x18);
|
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef *)pdev->pData, 0x80, PCD_SNG_BUF, 0x58);
|
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef *)pdev->pData, 0x81, PCD_SNG_BUF, 0xC0);
|
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef *)pdev->pData, 0x01, PCD_SNG_BUF, 0x110);
|
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef *)pdev->pData, 0x82, PCD_SNG_BUF, 0x100);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief De-Initializes the Low Level portion of the Device driver.
|
||||
* @param pdev: Device handle
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) {
|
||||
HAL_PCD_DeInit((PCD_HandleTypeDef *)pdev->pData);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Starts the Low Level portion of the Device driver.
|
||||
* @param pdev: Device handle
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) {
|
||||
HAL_PCD_Start((PCD_HandleTypeDef *)pdev->pData);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stops the Low Level portion of the Device driver.
|
||||
* @param pdev: Device handle
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) {
|
||||
HAL_PCD_Stop((PCD_HandleTypeDef *)pdev->pData);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Opens an endpoint of the Low Level Driver.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @param ep_type: Endpoint Type
|
||||
* @param ep_mps: Endpoint Max Packet Size
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev,
|
||||
uint8_t ep_addr,
|
||||
uint8_t ep_type,
|
||||
uint16_t ep_mps) {
|
||||
HAL_PCD_EP_Open((PCD_HandleTypeDef *)pdev->pData,
|
||||
ep_addr,
|
||||
ep_mps,
|
||||
ep_type);
|
||||
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Closes an endpoint of the Low Level Driver.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) {
|
||||
HAL_PCD_EP_Close((PCD_HandleTypeDef *)pdev->pData, ep_addr);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Flushes an endpoint of the Low Level Driver.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) {
|
||||
HAL_PCD_EP_Flush((PCD_HandleTypeDef *)pdev->pData, ep_addr);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets a Stall condition on an endpoint of the Low Level Driver.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) {
|
||||
HAL_PCD_EP_SetStall((PCD_HandleTypeDef *)pdev->pData, ep_addr);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clears a Stall condition on an endpoint of the Low Level Driver.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) {
|
||||
HAL_PCD_EP_ClrStall((PCD_HandleTypeDef *)pdev->pData, ep_addr);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns Stall condition.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval Stall (1: Yes, 0: No)
|
||||
*/
|
||||
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) {
|
||||
PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef *)pdev->pData;
|
||||
|
||||
if((ep_addr & 0x80) == 0x80) {
|
||||
return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
|
||||
} else {
|
||||
return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @brief Assigns a USB address to the device.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) {
|
||||
HAL_PCD_SetAddress((PCD_HandleTypeDef *)pdev->pData, dev_addr);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Transmits data over an endpoint.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @param pbuf: Pointer to data to be sent
|
||||
* @param size: Data size
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev,
|
||||
uint8_t ep_addr,
|
||||
uint8_t *pbuf,
|
||||
uint16_t size) {
|
||||
HAL_PCD_EP_Transmit((PCD_HandleTypeDef *)pdev->pData, ep_addr, pbuf, size);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Prepares an endpoint for reception.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @param pbuf: Pointer to data to be received
|
||||
* @param size: Data size
|
||||
* @retval USBD Status
|
||||
*/
|
||||
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
|
||||
uint8_t ep_addr,
|
||||
uint8_t *pbuf,
|
||||
uint16_t size) {
|
||||
HAL_PCD_EP_Receive((PCD_HandleTypeDef *)pdev->pData, ep_addr, pbuf, size);
|
||||
return USBD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the last transfered packet size.
|
||||
* @param pdev: Device handle
|
||||
* @param ep_addr: Endpoint Number
|
||||
* @retval Recived Data Size
|
||||
*/
|
||||
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) {
|
||||
return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef *)pdev->pData, ep_addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Delays routine for the USB Device Library.
|
||||
* @param Delay: Delay in ms
|
||||
* @retval None
|
||||
*/
|
||||
void USBD_LL_Delay(uint32_t Delay) {
|
||||
HAL_Delay(Delay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief static single allocation.
|
||||
* @param size: size of allocated memory
|
||||
* @retval None
|
||||
*/
|
||||
void *USBD_static_malloc(uint32_t size) {
|
||||
static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef) / 4) + 1]; /* On 32-bit boundary */
|
||||
return mem;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dummy memory free
|
||||
* @param *p pointer to allocated memory address
|
||||
* @retval None
|
||||
*/
|
||||
void USBD_static_free(void *p) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Software Device Connection
|
||||
* @param hpcd: PCD handle
|
||||
* @param state: connection state (0 : disconnected / 1: connected)
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) {
|
||||
/* USER CODE BEGIN 4 */
|
||||
if(state == 1) {
|
||||
/* Configure Low Connection State */
|
||||
|
||||
} else {
|
||||
/* Configure High Connection State */
|
||||
}
|
||||
/* USER CODE END 4 */
|
||||
}
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
288
stmsp/stm32f303/src/usbd_desc.c
Normal file
288
stmsp/stm32f303/src/usbd_desc.c
Normal file
@@ -0,0 +1,288 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : usbd_desc.c
|
||||
* @version : v1.0_Cube
|
||||
* @brief : This file implements the USB Device descriptors
|
||||
******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2016 STMicroelectronics International N.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission.
|
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or
|
||||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usbd_core.h"
|
||||
#include "usbd_desc.h"
|
||||
#include "usbd_conf.h"
|
||||
|
||||
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC
|
||||
* @brief USBD descriptors module
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Private_TypesDefinitions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Private_Defines
|
||||
* @{
|
||||
*/
|
||||
#define USBD_VID 1155
|
||||
#define USBD_LANGID_STRING 1033
|
||||
#define USBD_MANUFACTURER_STRING "STMicroelectronics"
|
||||
#define USBD_PID_FS 22336
|
||||
#define USBD_PRODUCT_STRING_FS "STM32 Virtual ComPort"
|
||||
#define USBD_SERIALNUMBER_STRING_FS "00000000001A"
|
||||
#define USBD_CONFIGURATION_STRING_FS "CDC Config"
|
||||
#define USBD_INTERFACE_STRING_FS "CDC Interface"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Private_Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Private_Variables
|
||||
* @{
|
||||
*/
|
||||
uint8_t *USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
uint8_t *USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
uint8_t *USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
uint8_t *USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
uint8_t *USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
uint8_t *USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
uint8_t *USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||
|
||||
#ifdef USB_SUPPORT_USER_STRING_DESC
|
||||
uint8_t *USBD_FS_USRStringDesc(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
|
||||
#endif /* USB_SUPPORT_USER_STRING_DESC */
|
||||
|
||||
USBD_DescriptorsTypeDef FS_Desc =
|
||||
{
|
||||
USBD_FS_DeviceDescriptor,
|
||||
USBD_FS_LangIDStrDescriptor,
|
||||
USBD_FS_ManufacturerStrDescriptor,
|
||||
USBD_FS_ProductStrDescriptor,
|
||||
USBD_FS_SerialStrDescriptor,
|
||||
USBD_FS_ConfigStrDescriptor,
|
||||
USBD_FS_InterfaceStrDescriptor,
|
||||
};
|
||||
|
||||
#if defined(__ICCARM__) /*!< IAR Compiler */
|
||||
#pragma data_alignment = 4
|
||||
#endif
|
||||
/* USB Standard Device Descriptor */
|
||||
__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
|
||||
{
|
||||
0x12, /*bLength */
|
||||
USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
|
||||
0x00, /* bcdUSB */
|
||||
0x02,
|
||||
0x02, /*bDeviceClass*/
|
||||
0x02, /*bDeviceSubClass*/
|
||||
0x00, /*bDeviceProtocol*/
|
||||
USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
|
||||
LOBYTE(USBD_VID), /*idVendor*/
|
||||
HIBYTE(USBD_VID), /*idVendor*/
|
||||
LOBYTE(USBD_PID_FS), /*idVendor*/
|
||||
HIBYTE(USBD_PID_FS), /*idVendor*/
|
||||
0x00, /*bcdDevice rel. 2.00*/
|
||||
0x02,
|
||||
USBD_IDX_MFC_STR, /*Index of manufacturer string*/
|
||||
USBD_IDX_PRODUCT_STR, /*Index of product string*/
|
||||
USBD_IDX_SERIAL_STR, /*Index of serial number string*/
|
||||
USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
|
||||
};
|
||||
/* USB_DeviceDescriptor */
|
||||
|
||||
#if defined(__ICCARM__) /*!< IAR Compiler */
|
||||
#pragma data_alignment = 4
|
||||
#endif
|
||||
|
||||
/* USB Standard Device Descriptor */
|
||||
__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
|
||||
{
|
||||
USB_LEN_LANGID_STR_DESC,
|
||||
USB_DESC_TYPE_STRING,
|
||||
LOBYTE(USBD_LANGID_STRING),
|
||||
HIBYTE(USBD_LANGID_STRING),
|
||||
};
|
||||
|
||||
#if defined(__ICCARM__) /*!< IAR Compiler */
|
||||
#pragma data_alignment = 4
|
||||
#endif
|
||||
__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Private_FunctionPrototypes
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup USBD_DESC_Private_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief USBD_FS_DeviceDescriptor
|
||||
* return the device descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
*length = sizeof(USBD_FS_DeviceDesc);
|
||||
return USBD_FS_DeviceDesc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USBD_FS_LangIDStrDescriptor
|
||||
* return the LangID string descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
*length = sizeof(USBD_LangIDDesc);
|
||||
return USBD_LangIDDesc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USBD_FS_ProductStrDescriptor
|
||||
* return the product string descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
if(speed == 0) {
|
||||
USBD_GetString(USBD_PRODUCT_STRING_FS, USBD_StrDesc, length);
|
||||
} else {
|
||||
USBD_GetString(USBD_PRODUCT_STRING_FS, USBD_StrDesc, length);
|
||||
}
|
||||
return USBD_StrDesc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USBD_FS_ManufacturerStrDescriptor
|
||||
* return the manufacturer string descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
USBD_GetString(USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
|
||||
return USBD_StrDesc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USBD_FS_SerialStrDescriptor
|
||||
* return the serial number string descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
if(speed == USBD_SPEED_HIGH) {
|
||||
USBD_GetString(USBD_SERIALNUMBER_STRING_FS, USBD_StrDesc, length);
|
||||
} else {
|
||||
USBD_GetString(USBD_SERIALNUMBER_STRING_FS, USBD_StrDesc, length);
|
||||
}
|
||||
return USBD_StrDesc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USBD_FS_ConfigStrDescriptor
|
||||
* return the configuration string descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
if(speed == USBD_SPEED_HIGH) {
|
||||
USBD_GetString(USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
|
||||
} else {
|
||||
USBD_GetString(USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
|
||||
}
|
||||
return USBD_StrDesc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USBD_HS_InterfaceStrDescriptor
|
||||
* return the interface string descriptor
|
||||
* @param speed : current device speed
|
||||
* @param length : pointer to data length variable
|
||||
* @retval pointer to descriptor buffer
|
||||
*/
|
||||
uint8_t *USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
|
||||
if(speed == 0) {
|
||||
USBD_GetString(USBD_INTERFACE_STRING_FS, USBD_StrDesc, length);
|
||||
} else {
|
||||
USBD_GetString(USBD_INTERFACE_STRING_FS, USBD_StrDesc, length);
|
||||
}
|
||||
return USBD_StrDesc;
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
8
stmsp/stm32f303/src/version.c
Normal file
8
stmsp/stm32f303/src/version.c
Normal file
@@ -0,0 +1,8 @@
|
||||
#include "version.h"
|
||||
#include "version_number.h"
|
||||
|
||||
volatile const version_info_t version_info __attribute__((section(".version_info"))) = {
|
||||
.product_name = "STMSP-f303",
|
||||
.major = VERSION_MAJOR,
|
||||
.minor = VERSION_MINOR,
|
||||
.patch = VERSION_PATCH};
|
||||
Reference in New Issue
Block a user