mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-07 03:05:15 +03:00
nwxt appr. to canusbrelay
This commit is contained in:
parent
813549e0f2
commit
4fc13b2b11
@ -9,7 +9,7 @@ MCU = F042x6
|
||||
#DEFS += -DEBUG
|
||||
# change this linking script depending on particular MCU model,
|
||||
# for example, if you have STM32F103VBT6, you should write:
|
||||
LDSCRIPT = stm32f042k.ld
|
||||
LDSCRIPT = stm32f042x6.ld
|
||||
|
||||
INDEPENDENT_HEADERS=
|
||||
|
||||
@ -131,7 +131,7 @@ clean:
|
||||
|
||||
dfuboot: $(BIN)
|
||||
@echo " LOAD $(BIN) THROUGH DFU"
|
||||
$(DFUUTIL) -a0 -D $(BIN) -s 0x08000000
|
||||
$(DFUUTIL) -a0 -R -D $(BIN) -s 0x08000000
|
||||
|
||||
flash: $(BIN)
|
||||
@echo " FLASH $(BIN)"
|
||||
|
||||
@ -1,10 +1,21 @@
|
||||
Simple code for CAN/USB development board
|
||||
Simultaneous work of USB CDC (PL2303 emulation) and CAN
|
||||
CAN/USB management of 2 relays and some other things
|
||||
===================================================
|
||||
|
||||
The device can also work as USB-CAN converter.
|
||||
|
||||
CAN protocol is quite simple. The node receives data to selected CAN ID, transmission done with the
|
||||
ID = CANID + 0x100.
|
||||
|
||||
|
||||
Pinout:
|
||||
PB0 - LED0 - short blink when message received
|
||||
PB1 - LED1 - shine when line OK
|
||||
|
||||
PB8, PB9 - CAN Rx/Tx
|
||||
|
||||
PA11. PA12 - USB DM/DP
|
||||
- PA0/1 - Relay0/1
|
||||
- PA2..5 - Button0..3 (user buttons)
|
||||
- PA6/7 - ADC inputs through resistive divider (0..5 and 0..12V)
|
||||
- PA8..10 - PWM0..2 outputs (opendrain through SI2300, 5 or 12V)
|
||||
- PA13/14 - SWD; the SWD pin +3.3V connected through 22Ohm resistor
|
||||
- PA11. PA12 - USB DM/DP
|
||||
- PB0..PB7 - CAN ID
|
||||
- PB8, PB9 - CAN Rx/Tx
|
||||
- PB12..15 - LED0..3 outputs (direct outputs without any protection!!!)
|
||||
|
||||
The pins LEDr0 and LEDr1 are indicated relay works (12V through 2.2kOhm resistor)
|
||||
|
||||
81
F0-nolib/usbcan_relay/buttons.c
Normal file
81
F0-nolib/usbcan_relay/buttons.c
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "buttons.h"
|
||||
#include "hardware.h"
|
||||
|
||||
typedef struct{
|
||||
keyevent event; // current key event
|
||||
int16_t counter; // press/release counter
|
||||
uint32_t lastTms; // time of last event change
|
||||
} keybase;
|
||||
|
||||
static keybase allkeys[BTNSNO] = {0}; // array for buttons' states
|
||||
|
||||
void process_keys(){
|
||||
static uint32_t lastT = 0;
|
||||
if(Tms == lastT) return;
|
||||
uint16_t d = (uint16_t)(Tms - lastT);
|
||||
lastT = Tms;
|
||||
for(int i = 0; i < BTNSNO; ++i){
|
||||
keybase *k = &allkeys[i];
|
||||
keyevent e = k->event;
|
||||
if(BTN_state(i)){ // key is in pressed state
|
||||
switch(e){
|
||||
case EVT_NONE: // just pressed
|
||||
case EVT_RELEASE:
|
||||
if((k->counter += d) > PRESSTHRESHOLD){
|
||||
k->event = EVT_PRESS;
|
||||
}
|
||||
break;
|
||||
case EVT_PRESS: // hold
|
||||
if((k->counter += d)> HOLDTHRESHOLD){
|
||||
k->event = EVT_HOLD;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}else{ // released
|
||||
if(e == EVT_PRESS || e == EVT_RELEASE){ // released
|
||||
if(k->counter > PRESSTHRESHOLD) k->counter = PRESSTHRESHOLD;
|
||||
else if((k->counter -= d) < 0){
|
||||
k->event = EVT_NONE; // button released
|
||||
}
|
||||
}
|
||||
}
|
||||
if(e != k->event){
|
||||
k->lastTms = Tms;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief keystate - curent key state
|
||||
* @param k - key number
|
||||
* @param T - last event changing time
|
||||
* @return key event
|
||||
*/
|
||||
keyevent keystate(uint8_t k, uint32_t *T){
|
||||
if(k >= BTNSNO) return EVT_NONE;
|
||||
keyevent evt = allkeys[k].event;
|
||||
// change state `release` to `none` after 1st check
|
||||
if(evt == EVT_RELEASE) allkeys[k].event = EVT_NONE;
|
||||
if(T) *T = allkeys[k].lastTms;
|
||||
return evt;
|
||||
}
|
||||
42
F0-nolib/usbcan_relay/buttons.h
Normal file
42
F0-nolib/usbcan_relay/buttons.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef BUTTONS_H__
|
||||
|
||||
#include <stm32f0.h>
|
||||
|
||||
// threshold in ms for press/hold
|
||||
#define PRESSTHRESHOLD (9)
|
||||
#define HOLDTHRESHOLD (199)
|
||||
|
||||
// events
|
||||
typedef enum{
|
||||
EVT_NONE, // no events with given key
|
||||
EVT_PRESS, // pressed (hold more than PRESSTHRESHOLD ms)
|
||||
EVT_HOLD, // hold more than HOLDTHRESHOLD ms
|
||||
EVT_RELEASE // released after press or hold state
|
||||
} keyevent;
|
||||
|
||||
extern uint32_t lastUnsleep; // last keys activity time
|
||||
|
||||
void process_keys();
|
||||
keyevent keystate(uint8_t k, uint32_t *T);
|
||||
|
||||
#define BUTTONS_H__
|
||||
#endif // BUTTONS_H__
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* can.c
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,11 +13,9 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "can.h"
|
||||
#include "hardware.h"
|
||||
#include "proto.h"
|
||||
@ -42,6 +38,7 @@ static void can_process_fifo(uint8_t fifo_num);
|
||||
static CAN_message loc_flood_msg;
|
||||
static CAN_message *flood_msg = NULL; // == loc_flood_msg - to flood
|
||||
|
||||
|
||||
CAN_status CAN_get_status(){
|
||||
CAN_status st = can_status;
|
||||
// give overrun message only once
|
||||
@ -108,7 +105,6 @@ so if TBS1=4 and TBS2=3, sum=8, bit sampling freq is 48/8 = 6MHz
|
||||
|
||||
// speed - in kbps
|
||||
void CAN_setup(uint16_t speed){
|
||||
LED_off(LED1);
|
||||
if(speed == 0) speed = oldspeed;
|
||||
else if(speed < 50) speed = 50;
|
||||
else if(speed > 3000) speed = 3000;
|
||||
@ -123,46 +119,32 @@ void CAN_setup(uint16_t speed){
|
||||
| (4 << (0 * 4)) | (4 << (1 * 4)); /* (2) */
|
||||
/* Enable the peripheral clock CAN */
|
||||
RCC->APB1ENR |= RCC_APB1ENR_CANEN;
|
||||
/* Configure CAN */
|
||||
/* (1) Enter CAN init mode to write the configuration */
|
||||
/* (2) Wait the init mode entering */
|
||||
/* (3) Exit sleep mode */
|
||||
/* (4) Normal mode, set timing to 100kb/s: TBS1 = 4, TBS2 = 3, prescaler = 60 */
|
||||
/* (5) Leave init mode */
|
||||
/* (6) Wait the init mode leaving */
|
||||
/* (7) Enter filter init mode, (16-bit + mask, bank 0 for FIFO 0) */
|
||||
/* (8) Acivate filter 0 for two IDs */
|
||||
/* (9) Identifier list mode */
|
||||
/* (10) Set the Id list */
|
||||
/* (12) Leave filter init */
|
||||
/* (13) Set error interrupts enable */
|
||||
CAN->MCR |= CAN_MCR_INRQ; /* (1) */
|
||||
while((CAN->MSR & CAN_MSR_INAK)!=CAN_MSR_INAK) /* (2) */
|
||||
// Configure CAN
|
||||
while((CAN->MSR & CAN_MSR_INAK)!=CAN_MSR_INAK)
|
||||
{
|
||||
if(--tmout == 0) break;
|
||||
}
|
||||
CAN->MCR &=~ CAN_MCR_SLEEP; /* (3) */
|
||||
CAN->MCR |= CAN_MCR_ABOM; /* allow automatically bus-off */
|
||||
|
||||
CAN->BTR = 2 << 20 | 3 << 16 | (6000/speed - 1); /* (4) */
|
||||
CAN->MCR &=~ CAN_MCR_INRQ; /* (5) */
|
||||
CAN->MCR &=~ CAN_MCR_SLEEP;
|
||||
CAN->MCR |= CAN_MCR_ABOM; // allow automatically bus-off
|
||||
CAN->BTR = 2 << 20 | 3 << 16 | (6000/speed - 1); // speed
|
||||
CAN->MCR &=~ CAN_MCR_INRQ;
|
||||
tmout = 16000000;
|
||||
while((CAN->MSR & CAN_MSR_INAK)==CAN_MSR_INAK) if(--tmout == 0) break; /* (6) */
|
||||
// accept ALL
|
||||
CAN->FMR = CAN_FMR_FINIT; /* (7) */
|
||||
CAN->FA1R = CAN_FA1R_FACT0 | CAN_FA1R_FACT1; /* (8) */
|
||||
while((CAN->MSR & CAN_MSR_INAK)==CAN_MSR_INAK) if(--tmout == 0) break;
|
||||
// accept self ID at filter 0, ALL other at filters 1 and 2
|
||||
CAN->FMR = CAN_FMR_FINIT;
|
||||
CAN->FA1R = CAN_FA1R_FACT0 | CAN_FA1R_FACT1 | CAN_FA1R_FACT2;
|
||||
CAN->FM1R = CAN_FM1R_FBM0; // identifier mode for bank#0, mask mode for #1 and #2
|
||||
// set to 1 all needed bits of CAN->FFA1R to switch given filters to FIFO1
|
||||
CAN->sFilterRegister[0].FR1 = (1<<21)|(1<<5); // all odd IDs
|
||||
CAN->FFA1R = 2; // filter 1 for FIFO1, filter 0 - for FIFO0
|
||||
CAN->sFilterRegister[1].FR1 = (1<<21); // all even IDs
|
||||
CAN->FMR &=~ CAN_FMR_FINIT; /* (12) */
|
||||
CAN->IER |= CAN_IER_ERRIE | CAN_IER_FOVIE0 | CAN_IER_FOVIE1; /* (13) */
|
||||
CAN->sFilterRegister[0].FR1 = CANID << 5; // self ID
|
||||
CAN->sFilterRegister[1].FR1 = (1<<21)|(1<<5); // all odd IDs
|
||||
CAN->sFilterRegister[2].FR1 = (1<<21); // all even IDs
|
||||
CAN->FFA1R = 2; // filter 1 for FIFO1, filters 0&2 - for FIFO0
|
||||
CAN->FMR &=~ CAN_FMR_FINIT; // end of filters init
|
||||
CAN->IER |= CAN_IER_ERRIE | CAN_IER_FOVIE0 | CAN_IER_FOVIE1;
|
||||
|
||||
/* Configure IT */
|
||||
/* (14) Set priority for CAN_IRQn */
|
||||
/* (15) Enable CAN_IRQn */
|
||||
NVIC_SetPriority(CEC_CAN_IRQn, 0); /* (14) */
|
||||
NVIC_EnableIRQ(CEC_CAN_IRQn); /* (15) */
|
||||
NVIC_SetPriority(CEC_CAN_IRQn, 0);
|
||||
NVIC_EnableIRQ(CEC_CAN_IRQn);
|
||||
can_status = CAN_READY;
|
||||
}
|
||||
|
||||
@ -284,7 +266,6 @@ void set_flood(CAN_message *msg){
|
||||
|
||||
static void can_process_fifo(uint8_t fifo_num){
|
||||
if(fifo_num > 1) return;
|
||||
LED_on(LED1); // Turn on LED1 - message received
|
||||
CAN_FIFOMailBox_TypeDef *box = &CAN->sFIFOMailBox[fifo_num];
|
||||
volatile uint32_t *RFxR = (fifo_num) ? &CAN->RF1R : &CAN->RF0R;
|
||||
// read all
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* can.h
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,21 +13,22 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __CAN_H__
|
||||
#define __CAN_H__
|
||||
|
||||
#include "hardware.h"
|
||||
|
||||
// CAN ID mask (11 bits)
|
||||
#define CANIDMASK (0x7ff)
|
||||
|
||||
// amount of filter banks in STM32F0
|
||||
#define STM32F0FBANKNO 28
|
||||
#define STM32F0FBANKNO (28)
|
||||
// flood period in milliseconds
|
||||
#define FLOOD_PERIOD_MS 5
|
||||
#define FLOOD_PERIOD_MS (5)
|
||||
|
||||
// incoming message buffer size
|
||||
#define CAN_INMESSAGE_SIZE (8)
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* hardware.c - hardware-dependent macros & functions
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,24 +13,37 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "hardware.h"
|
||||
#include "can.h"
|
||||
|
||||
uint8_t ledsON = 0;
|
||||
uint16_t CANID = 0xFFFF; // self CAN ID (read @ init)
|
||||
|
||||
// LEDS: 0 - PB12, 1 - PB13, 2 - PB14, 3 - PB15
|
||||
GPIO_TypeDef *LEDports[LEDSNO] = {GPIOB, GPIOB, GPIOB, GPIOB};
|
||||
const uint32_t LEDpins[LEDSNO] = {1<<12, 1<<13, 1<<14, 1<<15};
|
||||
// Buttons: PA2..PA5, pullup
|
||||
GPIO_TypeDef *BTNports[BTNSNO] = {GPIOA, GPIOA, GPIOA, GPIOA};
|
||||
const uint32_t BTNpins[BTNSNO] = {1<<2, 1<<3, 1<<4, 1<<5};
|
||||
|
||||
void gpio_setup(void){
|
||||
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
|
||||
// Set LEDS (PB0/1) as output
|
||||
pin_set(LED0_port, LED0_pin); // clear LEDs
|
||||
pin_set(LED1_port, LED1_pin);
|
||||
GPIOB->MODER = (GPIOB->MODER & ~(GPIO_MODER_MODER0 | GPIO_MODER_MODER1)
|
||||
) |
|
||||
GPIO_MODER_MODER0_O | GPIO_MODER_MODER1_O;
|
||||
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;
|
||||
// Set LEDS (PB12..15) as output, ADDR (PB0..7) - pullup inputs
|
||||
// WARNING! All code here is hardcore!
|
||||
pin_set(GPIOB, 0xf<<12); // clear LEDs
|
||||
GPIOB->MODER = GPIO_MODER_MODER12_O | GPIO_MODER_MODER13_O | GPIO_MODER_MODER14_O | GPIO_MODER_MODER15_O;
|
||||
GPIOB->PUPDR = GPIO_PUPDR0_PU | GPIO_PUPDR1_PU | GPIO_PUPDR2_PU | GPIO_PUPDR3_PU | GPIO_PUPDR4_PU |
|
||||
GPIO_PUPDR5_PU | GPIO_PUPDR6_PU | GPIO_PUPDR7_PU;
|
||||
// relays (PA0..1) as outputs, buttons (PA2..5) as pullup inputs
|
||||
// PA8..10 - PWM @ TIM1
|
||||
GPIOA->MODER = GPIO_MODER_MODER0_O | GPIO_MODER_MODER1_O |
|
||||
GPIO_MODER_MODER8_AF | GPIO_MODER_MODER9_AF | GPIO_MODER_MODER10_AF;
|
||||
GPIOA->PUPDR = GPIO_PUPDR2_PU | GPIO_PUPDR3_PU | GPIO_PUPDR4_PU | GPIO_PUPDR5_PU;
|
||||
CANID = (~READ_INV_CAN_ADDR()) & CAN_INV_ID_MASK;
|
||||
// alternate functions @TIM1 PWM (AF2), PA8..10
|
||||
GPIOA->AFR[1] = (2 << (0*4)) | (2 << (1*4)) | (2 << (2*4));
|
||||
}
|
||||
|
||||
void iwdg_setup(){
|
||||
@ -58,6 +69,21 @@ void iwdg_setup(){
|
||||
IWDG->KR = IWDG_REFRESH; /* (6) */
|
||||
}
|
||||
|
||||
void tim1_setup(){
|
||||
// TIM1 channels 1..3 - PWM output
|
||||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable clocking
|
||||
TIM1->PSC = 9; // F=48/10 = 4.8MHz
|
||||
TIM1->ARR = 255; // PWM frequency = 4800/256 = 18.75kHz
|
||||
// PWM mode 1 (OCxM = 110), preload enable
|
||||
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE |
|
||||
TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE;
|
||||
TIM1->CCMR2 = TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3PE;
|
||||
TIM1->CCER = TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E; // active high (CC1P=0), enable outputs
|
||||
TIM1->BDTR |= TIM_BDTR_MOE; // enable main output
|
||||
TIM1->CR1 |= TIM_CR1_CEN; // enable timer
|
||||
TIM1->EGR |= TIM_EGR_UG; // force update generation
|
||||
}
|
||||
|
||||
// pause in milliseconds for some purposes
|
||||
void pause_ms(uint32_t pause){
|
||||
uint32_t Tnxt = Tms + pause;
|
||||
@ -65,12 +91,13 @@ void pause_ms(uint32_t pause){
|
||||
}
|
||||
|
||||
void Jump2Boot(){
|
||||
__disable_irq();
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
void (*SysMemBootJump)(void);
|
||||
volatile uint32_t addr = 0x1FFFC800;
|
||||
volatile uint32_t addr = SystemMem;
|
||||
// reset systick
|
||||
SysTick->CTRL = 0;
|
||||
// reset clocks
|
||||
|
||||
RCC->APB1RSTR = RCC_APB1RSTR_CECRST | RCC_APB1RSTR_DACRST | RCC_APB1RSTR_PWRRST | RCC_APB1RSTR_CRSRST |
|
||||
RCC_APB1RSTR_CANRST | RCC_APB1RSTR_USBRST | RCC_APB1RSTR_I2C2RST | RCC_APB1RSTR_I2C1RST |
|
||||
RCC_APB1RSTR_USART4RST | RCC_APB1RSTR_USART3RST | RCC_APB1RSTR_USART2RST | RCC_APB1RSTR_SPI2RST |
|
||||
@ -87,11 +114,15 @@ void Jump2Boot(){
|
||||
RCC->AHBRSTR = 0;
|
||||
RCC->APB1RSTR = 0;
|
||||
RCC->APB2RSTR = 0;
|
||||
// remap memory to 0 (only for STM32F0)
|
||||
// enable SYSCFG clocking
|
||||
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
|
||||
__DSB();
|
||||
// remap system flash memory to 0 (only for STM32F0)
|
||||
SYSCFG->CFGR1 = 0x01; __DSB(); __ISB();
|
||||
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
|
||||
// set main stack pointer
|
||||
__set_MSP(*((uint32_t *)addr));
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
// jump to bootloader
|
||||
SysMemBootJump();
|
||||
}
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* hardware.h
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,17 +13,25 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __HARDWARE_H__
|
||||
#define __HARDWARE_H__
|
||||
|
||||
#include <stm32f0.h>
|
||||
|
||||
#define SYSMEM03x 0x1FFFEC00
|
||||
#define SYSMEM04x 0x1FFFC400
|
||||
#define SYSMEM05x 0x1FFFEC00
|
||||
#define SYSMEM07x 0x1FFFC800
|
||||
#define SYSMEM09x 0x1FFFD800
|
||||
// define SystemMem to other in MAKEFILE
|
||||
#ifndef SystemMem
|
||||
#define SystemMem SYSMEM04x
|
||||
#endif
|
||||
|
||||
#define CONCAT(a,b) a ## b
|
||||
#define STR_HELPER(s) #s
|
||||
#define STR(s) STR_HELPER(s)
|
||||
@ -33,29 +39,36 @@
|
||||
#define FORMUSART(X) CONCAT(USART, X)
|
||||
#define USARTX FORMUSART(USARTNUM)
|
||||
|
||||
// LEDS: 0 - PB0, 1 - PB1
|
||||
// LED0
|
||||
#define LED0_port GPIOB
|
||||
#define LED0_pin (1<<0)
|
||||
// LED1
|
||||
#define LED1_port GPIOB
|
||||
#define LED1_pin (1<<1)
|
||||
// LEDs amount
|
||||
#define LEDSNO (4)
|
||||
// LEDs ports & pins
|
||||
extern GPIO_TypeDef *LEDports[LEDSNO];
|
||||
extern const uint32_t LEDpins[LEDSNO];
|
||||
// LEDS: 0 - PB12, 1 - PB13, 2 - PB14, 3 - PB15
|
||||
#define LED_toggle(x) do{pin_toggle(LEDports[x], LEDpins[x]);}while(0)
|
||||
#define LED_on(x) do{pin_clear(LEDports[x], LEDpins[x]);}while(0)
|
||||
#define LED_off(x) do{pin_set(LEDports[x], LEDpins[x]);}while(0)
|
||||
|
||||
#define LED_blink(x) do{if(ledsON) pin_toggle(x ## _port, x ## _pin);}while(0)
|
||||
#define LED_on(x) do{if(ledsON) pin_clear(x ## _port, x ## _pin);}while(0)
|
||||
#define LED_off(x) do{pin_set(x ## _port, x ## _pin);}while(0)
|
||||
// Buttons amount
|
||||
#define BTNSNO (4)
|
||||
// Buttons ports & pins
|
||||
extern GPIO_TypeDef *BTNports[BTNSNO];
|
||||
extern const uint32_t BTNpins[BTNSNO];
|
||||
// state 1 - pressed, 0 - released
|
||||
#define BTN_state(x) ((BTNports[x]->IDR & BTNpins[x]) ? 0 : 1)
|
||||
|
||||
// mask for PB0..7
|
||||
#define CAN_INV_ID_MASK (0xff)
|
||||
// CAN address - PB0..7
|
||||
#define READ_INV_CAN_ADDR() (GPIOB->IDR & 0xff)
|
||||
|
||||
// CAN address - PB14(0), PB15(1), PA8(2)
|
||||
#define READ_CAN_INV_ADDR() (((GPIOA->IDR & (1<<8))>>6)|((GPIOB->IDR & (3<<14))>>14))
|
||||
|
||||
extern uint16_t CANID; // self CAN ID (read @ init)
|
||||
|
||||
extern volatile uint32_t Tms;
|
||||
|
||||
extern uint8_t ledsON;
|
||||
|
||||
void gpio_setup(void);
|
||||
void iwdg_setup();
|
||||
void tim1_setup();
|
||||
void pause_ms(uint32_t pause);
|
||||
void Jump2Boot();
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
151
F0-nolib/usbcan_relay/kicad/stm32 (2).csv
Normal file
151
F0-nolib/usbcan_relay/kicad/stm32 (2).csv
Normal file
@ -0,0 +1,151 @@
|
||||
"Source:","/home/eddy/Docs/SAO/ELECTRONICS/STM32/F0-srcs/CANUSB+relays/kicad/stm32.sch"
|
||||
"Date:","óÒ 16 ÉÀÎ 2021 11:40:04"
|
||||
"Tool:","Eeschema 5.1.7"
|
||||
"Generator:","/usr/local/share/kicad/plugins/bom_csv_grouped_by_value.py"
|
||||
"Component Count:","93"
|
||||
|
||||
"Individual Components:"
|
||||
|
||||
"Item","Qty","Reference(s)","Value","LibPart","Footprint","Datasheet","Manufacturer"
|
||||
"","","C1","1","stm32-rescue:C","Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder","",""
|
||||
"","","C2","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","C3","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","C4","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","C5","1","stm32-rescue:C","Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder","",""
|
||||
"","","C6","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","C7","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C8","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C9","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C10","47u 16V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
|
||||
"","","C11","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","C12","47u 10V","stm32-rescue:CP","Capacitor_Tantalum_SMD:CP_EIA-1608-08_AVX-J_Pad1.25x1.05mm_HandSolder","",""
|
||||
"","","C13","47u 10V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-1608-08_AVX-J_Pad1.25x1.05mm_HandSolder","~",""
|
||||
"","","C14","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C15","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","D1","PESD1CAN","elements:PESD1CAN","TO_SOT_Packages_SMD:SOT-23","",""
|
||||
"","","D2","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D3","USB6B1","elements:USB6B1","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"","","D4","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D5","MM3Z7V5","Device:D_Zener","Diode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolder","~",""
|
||||
"","","D6","CESD3v3","Device:D","Diode_SMD:D_SOD-523","~",""
|
||||
"","","D7","CESD3v3","Device:D","Diode_SMD:D_SOD-523","~",""
|
||||
"","","D8","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D9","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D10","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D11","1N5822","Device:D","Diode_THT:D_DO-201_P12.70mm_Horizontal","~",""
|
||||
"","","J1","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J2","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J3","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J4","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J5","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J6","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J7","01x05","Connector:Conn_01x05_Male","Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical","~",""
|
||||
"","","J8","Connector_Generic:Conn_02x04_Odd_Even","Connector_Generic:Conn_02x04_Odd_Even","Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_Vertical","~",""
|
||||
"","","J9","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"","","J10","Screw_Terminal_01x02","Connector:Screw_Terminal_01x02","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal","~",""
|
||||
"","","J11","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"","","J12","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"","","J13","USB_B","Connector:USB_B","Connectors_USB:USB_B_OST_USB-B1HSxx_Horizontal"," ~",""
|
||||
"","","J14","DB9_Female","Connector:DB9_Female","Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm"," ~",""
|
||||
"","","J15","01x03","Connector:Conn_01x03_Male","Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical","~",""
|
||||
"","","J16","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"","","J17","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"","","J18","01x05","Connector:Conn_01x05_Male","Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical","~",""
|
||||
"","","JP1","NON-ISOL","Device:Jumper","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P5.08mm_Vertical","~",""
|
||||
"","","K1","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_Omron-G5LE-1","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"","","K2","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_Omron-G5LE-1","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"","","L1","100u","Device:L","Inductor_SMD:L_12x12mm_H4.5mm","~",""
|
||||
"","","P1","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P2","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P3","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P4","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","Q1","B0505S","elements:B0505S","my_footprints:B0x0xS","",""
|
||||
"","","Q2","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","Q3","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","Q4","AO3407","Device:Q_PMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","Q5","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","Q6","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","Q7","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","R1","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R2","4k7","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","R3","22","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R4","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R5","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R6","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R7","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R8","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R9","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R10","22","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","R11","22","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","R12","2k2","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R13","120","stm32-rescue:R","Resistor_SMD:R_1210_3225Metric_Pad1.42x2.65mm_HandSolder","",""
|
||||
"","","R14","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R15","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R16","2k2","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R17","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R18","47k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R19","15k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R20","15k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R21","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R22","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R23","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R24","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R25","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R26","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","R27","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","SW1","SW_DIP_x08","Switch:SW_DIP_x08","Button_Switch_THT:SW_DIP_SPSTx08_Slide_9.78x22.5mm_W7.62mm_P2.54mm","~",""
|
||||
"","","SW2","SW_DIP_x01","Switch:SW_DIP_x01","Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","~",""
|
||||
"","","U1","MCP2551-I/SN","stm32-rescue:MCP2551-I_SN","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"","","U2","ISO1050DUB","Interface_CAN_LIN:ISO1050DUB","Package_SO:SOP-8_6.62x9.15mm_P2.54mm","http://www.ti.com/lit/ds/symlink/iso1050.pdf",""
|
||||
"","","U3","STM32F072C8Tx","MCU_ST_STM32F0:STM32F072C8Tx","Package_QFP:LQFP-48_7x7mm_P0.5mm","http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00090510.pdf",""
|
||||
"","","U4","LM2576","vreg:LM2576","TO_SOT_Packages_THT:TO-220-5_P3.4x3.7mm_StaggerEven_Lead3.8mm_Vertical","","Texas Instruments"
|
||||
"","","U5","LM1117-3.3","Regulator_Linear:LM1117-3.3","TO_SOT_Packages_SMD:SOT-223-3_TabPin2","http://www.ti.com/lit/ds/symlink/lm1117.pdf",""
|
||||
|
||||
|
||||
|
||||
"Collated Components:"
|
||||
|
||||
"Item","Qty","Reference(s)","Value","LibPart","Footprint","Datasheet","Manufacturer"
|
||||
"1","2","C1, C5","1","stm32-rescue:C","Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder","",""
|
||||
"2","10","C2, C3, C4, C6, C7, C8, C9, C11, C14, C15","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"3","1","C10","47u 16V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
|
||||
"4","2","C12, C13","47u 10V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-1608-08_AVX-J_Pad1.25x1.05mm_HandSolder","~",""
|
||||
"5","1","D1","PESD1CAN","elements:PESD1CAN","TO_SOT_Packages_SMD:SOT-23","",""
|
||||
"6","5","D2, D4, D8, D9, D10","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"7","1","D3","USB6B1","elements:USB6B1","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"8","1","D5","MM3Z7V5","Device:D_Zener","Diode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolder","~",""
|
||||
"9","2","D6, D7","CESD3v3","Device:D","Diode_SMD:D_SOD-523","~",""
|
||||
"10","1","D11","1N5822","Device:D","Diode_THT:D_DO-201_P12.70mm_Horizontal","~",""
|
||||
"11","6","J1, J2, J3, J4, J5, J6","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"12","1","J7","01x05","Connector:Conn_01x05_Male","Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical","~",""
|
||||
"13","1","J8","Connector_Generic:Conn_02x04_Odd_Even","Connector_Generic:Conn_02x04_Odd_Even","Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_Vertical","~",""
|
||||
"14","2","J9, J16","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"15","1","J10","Screw_Terminal_01x02","Connector:Screw_Terminal_01x02","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal","~",""
|
||||
"16","3","J11, J12, J17","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"17","1","J13","USB_B","Connector:USB_B","Connectors_USB:USB_B_OST_USB-B1HSxx_Horizontal"," ~",""
|
||||
"18","1","J14","DB9_Female","Connector:DB9_Female","Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm"," ~",""
|
||||
"19","1","J15","01x03","Connector:Conn_01x03_Male","Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical","~",""
|
||||
"20","1","J18","01x05","Connector:Conn_01x05_Male","Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical","~",""
|
||||
"21","1","JP1","NON-ISOL","Device:Jumper","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P5.08mm_Vertical","~",""
|
||||
"22","2","K1, K2","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_Omron-G5LE-1","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"23","1","L1","100u","Device:L","Inductor_SMD:L_12x12mm_H4.5mm","~",""
|
||||
"24","4","P1, P2, P3, P4","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"25","1","Q1","B0505S","elements:B0505S","my_footprints:B0x0xS","",""
|
||||
"26","5","Q2, Q3, Q5, Q6, Q7","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"27","1","Q4","AO3407","Device:Q_PMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"28","8","R1, R8, R14, R17, R21, R25, R26, R27","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"29","1","R2","4k7","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"30","3","R3, R10, R11","22","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"31","4","R4, R5, R6, R7","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"32","5","R9, R15, R22, R23, R24","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"33","2","R12, R16","2k2","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"34","1","R13","120","stm32-rescue:R","Resistor_SMD:R_1210_3225Metric_Pad1.42x2.65mm_HandSolder","",""
|
||||
"35","1","R18","47k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"36","2","R19, R20","15k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"37","1","SW1","SW_DIP_x08","Switch:SW_DIP_x08","Button_Switch_THT:SW_DIP_SPSTx08_Slide_9.78x22.5mm_W7.62mm_P2.54mm","~",""
|
||||
"38","1","SW2","SW_DIP_x01","Switch:SW_DIP_x01","Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","~",""
|
||||
"39","1","U1","MCP2551-I/SN","stm32-rescue:MCP2551-I_SN","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"40","1","U2","ISO1050DUB","Interface_CAN_LIN:ISO1050DUB","Package_SO:SOP-8_6.62x9.15mm_P2.54mm","http://www.ti.com/lit/ds/symlink/iso1050.pdf",""
|
||||
"41","1","U3","STM32F072C8Tx","MCU_ST_STM32F0:STM32F072C8Tx","Package_QFP:LQFP-48_7x7mm_P0.5mm","http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00090510.pdf",""
|
||||
"42","1","U4","LM2576","vreg:LM2576","TO_SOT_Packages_THT:TO-220-5_P3.4x3.7mm_StaggerEven_Lead3.8mm_Vertical","","Texas Instruments"
|
||||
"43","1","U5","LM1117-3.3","Regulator_Linear:LM1117-3.3","TO_SOT_Packages_SMD:SOT-223-3_TabPin2","http://www.ti.com/lit/ds/symlink/lm1117.pdf",""
|
||||
|
Can't render this file because it has a wrong number of fields in line 7.
|
@ -1,8 +1,8 @@
|
||||
"Source:","/home/eddy/Docs/SAO/ELECTRONICS/STM32/F0-srcs/CANUSB+relays/kicad/stm32.sch"
|
||||
"Date:","óÒ 16 ÉÀÎ 2021 11:40:04"
|
||||
"Tool:","Eeschema 5.1.7"
|
||||
"Source:","/home/eddy/Yandex.Disk/Projects/stm32samples/F0-nolib/usbcan_relay/kicad/stm32.sch"
|
||||
"Date:","÷Ô 20 ÉÀÌ 2021 17:37:47"
|
||||
"Tool:","Eeschema 5.1.10"
|
||||
"Generator:","/usr/local/share/kicad/plugins/bom_csv_grouped_by_value.py"
|
||||
"Component Count:","93"
|
||||
"Component Count:","96"
|
||||
|
||||
"Individual Components:"
|
||||
|
||||
@ -16,11 +16,11 @@
|
||||
"","","C7","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C8","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C9","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C10","47u 16V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
|
||||
"","","C10","100u 16V","Device:CP","Capacitor_THT:CP_Radial_D8.0mm_P3.50mm","~",""
|
||||
"","","C11","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","C12","47u 10V","stm32-rescue:CP","Capacitor_Tantalum_SMD:CP_EIA-1608-08_AVX-J_Pad1.25x1.05mm_HandSolder","",""
|
||||
"","","C13","47u 10V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-1608-08_AVX-J_Pad1.25x1.05mm_HandSolder","~",""
|
||||
"","","C14","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"","","C12","47u 6V","stm32-rescue:CP","Capacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-A_Pad1.58x1.35mm_HandSolder","",""
|
||||
"","","C13","47u 10V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
|
||||
"","","C14","100u 16V","Device:CP","Capacitor_THT:CP_Radial_D8.0mm_P3.50mm","~",""
|
||||
"","","C15","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"","","D1","PESD1CAN","elements:PESD1CAN","TO_SOT_Packages_SMD:SOT-23","",""
|
||||
"","","D2","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
@ -32,33 +32,35 @@
|
||||
"","","D8","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D9","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D10","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"","","D11","1N5822","Device:D","Diode_THT:D_DO-201_P12.70mm_Horizontal","~",""
|
||||
"","","J1","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J2","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J3","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J4","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J5","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J6","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","D11","1N5822","Device:D","Diode_THT:D_DO-201_P3.81mm_Vertical_AnodeUp","~",""
|
||||
"","","J1","+3.3V","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J2","NRST","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J3","BOOT0","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J4","SWDIO","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J5","SWCLK","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J6","GND","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"","","J7","01x05","Connector:Conn_01x05_Male","Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical","~",""
|
||||
"","","J8","Connector_Generic:Conn_02x04_Odd_Even","Connector_Generic:Conn_02x04_Odd_Even","Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_Vertical","~",""
|
||||
"","","J9","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"","","J10","Screw_Terminal_01x02","Connector:Screw_Terminal_01x02","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal","~",""
|
||||
"","","J10","Screw_Terminal_01x02","Connector:Screw_Terminal_01x02","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal","~",""
|
||||
"","","J11","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"","","J12","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"","","J13","USB_B","Connector:USB_B","Connectors_USB:USB_B_OST_USB-B1HSxx_Horizontal"," ~",""
|
||||
"","","J14","DB9_Female","Connector:DB9_Female","Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm"," ~",""
|
||||
"","","J15","01x03","Connector:Conn_01x03_Male","Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical","~",""
|
||||
"","","J16","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"","","J17","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"","","J18","01x05","Connector:Conn_01x05_Male","Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical","~",""
|
||||
"","","JP1","NON-ISOL","Device:Jumper","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P5.08mm_Vertical","~",""
|
||||
"","","K1","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_Omron-G5LE-1","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"","","K2","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_Omron-G5LE-1","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"","","K1","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_C","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"","","K2","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_C","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"","","L1","100u","Device:L","Inductor_SMD:L_12x12mm_H4.5mm","~",""
|
||||
"","","P1","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P2","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P3","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P4","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P5","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P6","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","P7","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"","","Q1","B0505S","elements:B0505S","my_footprints:B0x0xS","",""
|
||||
"","","Q2","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"","","Q3","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
@ -100,6 +102,7 @@
|
||||
"","","U3","STM32F072C8Tx","MCU_ST_STM32F0:STM32F072C8Tx","Package_QFP:LQFP-48_7x7mm_P0.5mm","http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00090510.pdf",""
|
||||
"","","U4","LM2576","vreg:LM2576","TO_SOT_Packages_THT:TO-220-5_P3.4x3.7mm_StaggerEven_Lead3.8mm_Vertical","","Texas Instruments"
|
||||
"","","U5","LM1117-3.3","Regulator_Linear:LM1117-3.3","TO_SOT_Packages_SMD:SOT-223-3_TabPin2","http://www.ti.com/lit/ds/symlink/lm1117.pdf",""
|
||||
"","","U6","IP4220CZ6","Power_Protection:NUP4202","Package_SO:TSOP-6_1.65x3.05mm_P0.95mm","http://www.onsemi.com/pub_link/Collateral/NUP4202W1-D.PDF",""
|
||||
|
||||
|
||||
|
||||
@ -107,45 +110,51 @@
|
||||
|
||||
"Item","Qty","Reference(s)","Value","LibPart","Footprint","Datasheet","Manufacturer"
|
||||
"1","2","C1, C5","1","stm32-rescue:C","Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder","",""
|
||||
"2","10","C2, C3, C4, C6, C7, C8, C9, C11, C14, C15","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"3","1","C10","47u 16V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
|
||||
"4","2","C12, C13","47u 10V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-1608-08_AVX-J_Pad1.25x1.05mm_HandSolder","~",""
|
||||
"5","1","D1","PESD1CAN","elements:PESD1CAN","TO_SOT_Packages_SMD:SOT-23","",""
|
||||
"6","5","D2, D4, D8, D9, D10","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"7","1","D3","USB6B1","elements:USB6B1","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"8","1","D5","MM3Z7V5","Device:D_Zener","Diode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolder","~",""
|
||||
"9","2","D6, D7","CESD3v3","Device:D","Diode_SMD:D_SOD-523","~",""
|
||||
"10","1","D11","1N5822","Device:D","Diode_THT:D_DO-201_P12.70mm_Horizontal","~",""
|
||||
"11","6","J1, J2, J3, J4, J5, J6","Conn_01x01_Female","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"12","1","J7","01x05","Connector:Conn_01x05_Male","Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical","~",""
|
||||
"13","1","J8","Connector_Generic:Conn_02x04_Odd_Even","Connector_Generic:Conn_02x04_Odd_Even","Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_Vertical","~",""
|
||||
"14","2","J9, J16","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"15","1","J10","Screw_Terminal_01x02","Connector:Screw_Terminal_01x02","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal","~",""
|
||||
"16","3","J11, J12, J17","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"17","1","J13","USB_B","Connector:USB_B","Connectors_USB:USB_B_OST_USB-B1HSxx_Horizontal"," ~",""
|
||||
"18","1","J14","DB9_Female","Connector:DB9_Female","Connector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm"," ~",""
|
||||
"19","1","J15","01x03","Connector:Conn_01x03_Male","Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical","~",""
|
||||
"20","1","J18","01x05","Connector:Conn_01x05_Male","Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical","~",""
|
||||
"21","1","JP1","NON-ISOL","Device:Jumper","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P5.08mm_Vertical","~",""
|
||||
"22","2","K1, K2","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_Omron-G5LE-1","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"23","1","L1","100u","Device:L","Inductor_SMD:L_12x12mm_H4.5mm","~",""
|
||||
"24","4","P1, P2, P3, P4","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"25","1","Q1","B0505S","elements:B0505S","my_footprints:B0x0xS","",""
|
||||
"26","5","Q2, Q3, Q5, Q6, Q7","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"27","1","Q4","AO3407","Device:Q_PMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"28","8","R1, R8, R14, R17, R21, R25, R26, R27","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"29","1","R2","4k7","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"30","3","R3, R10, R11","22","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"31","4","R4, R5, R6, R7","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"32","5","R9, R15, R22, R23, R24","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"33","2","R12, R16","2k2","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"34","1","R13","120","stm32-rescue:R","Resistor_SMD:R_1210_3225Metric_Pad1.42x2.65mm_HandSolder","",""
|
||||
"35","1","R18","47k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"36","2","R19, R20","15k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"37","1","SW1","SW_DIP_x08","Switch:SW_DIP_x08","Button_Switch_THT:SW_DIP_SPSTx08_Slide_9.78x22.5mm_W7.62mm_P2.54mm","~",""
|
||||
"38","1","SW2","SW_DIP_x01","Switch:SW_DIP_x01","Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","~",""
|
||||
"39","1","U1","MCP2551-I/SN","stm32-rescue:MCP2551-I_SN","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"40","1","U2","ISO1050DUB","Interface_CAN_LIN:ISO1050DUB","Package_SO:SOP-8_6.62x9.15mm_P2.54mm","http://www.ti.com/lit/ds/symlink/iso1050.pdf",""
|
||||
"41","1","U3","STM32F072C8Tx","MCU_ST_STM32F0:STM32F072C8Tx","Package_QFP:LQFP-48_7x7mm_P0.5mm","http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00090510.pdf",""
|
||||
"42","1","U4","LM2576","vreg:LM2576","TO_SOT_Packages_THT:TO-220-5_P3.4x3.7mm_StaggerEven_Lead3.8mm_Vertical","","Texas Instruments"
|
||||
"43","1","U5","LM1117-3.3","Regulator_Linear:LM1117-3.3","TO_SOT_Packages_SMD:SOT-223-3_TabPin2","http://www.ti.com/lit/ds/symlink/lm1117.pdf",""
|
||||
"2","9","C2, C3, C4, C6, C7, C8, C9, C11, C15","0.1","stm32-rescue:C","Capacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"3","2","C10, C14","100u 16V","Device:CP","Capacitor_THT:CP_Radial_D8.0mm_P3.50mm","~",""
|
||||
"4","1","C12","47u 6V","stm32-rescue:CP","Capacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-A_Pad1.58x1.35mm_HandSolder","",""
|
||||
"5","1","C13","47u 10V","Device:CP","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
|
||||
"6","1","D1","PESD1CAN","elements:PESD1CAN","TO_SOT_Packages_SMD:SOT-23","",""
|
||||
"7","5","D2, D4, D8, D9, D10","SS14","Device:D_Schottky","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","~",""
|
||||
"8","1","D3","USB6B1","elements:USB6B1","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"9","1","D5","MM3Z7V5","Device:D_Zener","Diode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolder","~",""
|
||||
"10","2","D6, D7","CESD3v3","Device:D","Diode_SMD:D_SOD-523","~",""
|
||||
"11","1","D11","1N5822","Device:D","Diode_THT:D_DO-201_P3.81mm_Vertical_AnodeUp","~",""
|
||||
"12","1","J1","+3.3V","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"13","1","J2","NRST","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"14","1","J3","BOOT0","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"15","1","J4","SWDIO","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"16","1","J5","SWCLK","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"17","1","J6","GND","Connector:Conn_01x01_Female","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
|
||||
"18","1","J7","01x05","Connector:Conn_01x05_Male","Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical","~",""
|
||||
"19","1","J8","Connector_Generic:Conn_02x04_Odd_Even","Connector_Generic:Conn_02x04_Odd_Even","Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_Vertical","~",""
|
||||
"20","2","J9, J16","Conn_01x02_Female","Connector:Conn_01x02_Female","Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical","~",""
|
||||
"21","1","J10","Screw_Terminal_01x02","Connector:Screw_Terminal_01x02","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal","~",""
|
||||
"22","3","J11, J12, J17","Screw_Terminal_01x03","Connector:Screw_Terminal_01x03","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","~",""
|
||||
"23","1","J13","USB_B","Connector:USB_B","Connectors_USB:USB_B_OST_USB-B1HSxx_Horizontal"," ~",""
|
||||
"24","1","J15","01x03","Connector:Conn_01x03_Male","Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical","~",""
|
||||
"25","1","J18","01x05","Connector:Conn_01x05_Male","Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical","~",""
|
||||
"26","1","JP1","NON-ISOL","Device:Jumper","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P5.08mm_Vertical","~",""
|
||||
"27","2","K1, K2","G5LE-1","Relay:G5LE-1","Relay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_C","http://www.omron.com/ecb/products/pdf/en-g5le.pdf",""
|
||||
"28","1","L1","100u","Device:L","Inductor_SMD:L_12x12mm_H4.5mm","~",""
|
||||
"29","7","P1, P2, P3, P4, P5, P6, P7","Hole","stm32-rescue:CONN_01X01","my_footprints:Hole_3mm","",""
|
||||
"30","1","Q1","B0505S","elements:B0505S","my_footprints:B0x0xS","",""
|
||||
"31","5","Q2, Q3, Q5, Q6, Q7","SI2300","Device:Q_NMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"32","1","Q4","AO3407","Device:Q_PMOS_GSD","TO_SOT_Packages_SMD:SOT-23_Handsoldering","~",""
|
||||
"33","8","R1, R8, R14, R17, R21, R25, R26, R27","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"34","1","R2","4k7","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","",""
|
||||
"35","3","R3, R10, R11","22","stm32-rescue:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"36","4","R4, R5, R6, R7","680","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"37","5","R9, R15, R22, R23, R24","330","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"38","2","R12, R16","2k2","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"39","1","R13","120","stm32-rescue:R","Resistor_SMD:R_1210_3225Metric_Pad1.42x2.65mm_HandSolder","",""
|
||||
"40","1","R18","47k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"41","2","R19, R20","15k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolder","~",""
|
||||
"42","1","SW1","SW_DIP_x08","Switch:SW_DIP_x08","Button_Switch_THT:SW_DIP_SPSTx08_Slide_9.78x22.5mm_W7.62mm_P2.54mm","~",""
|
||||
"43","1","SW2","SW_DIP_x01","Switch:SW_DIP_x01","Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","~",""
|
||||
"44","1","U1","MCP2551-I/SN","stm32-rescue:MCP2551-I_SN","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","",""
|
||||
"45","1","U2","ISO1050DUB","Interface_CAN_LIN:ISO1050DUB","Package_SO:SOP-8_6.62x9.15mm_P2.54mm","http://www.ti.com/lit/ds/symlink/iso1050.pdf",""
|
||||
"46","1","U3","STM32F072C8Tx","MCU_ST_STM32F0:STM32F072C8Tx","Package_QFP:LQFP-48_7x7mm_P0.5mm","http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00090510.pdf",""
|
||||
"47","1","U4","LM2576","vreg:LM2576","TO_SOT_Packages_THT:TO-220-5_P3.4x3.7mm_StaggerEven_Lead3.8mm_Vertical","","Texas Instruments"
|
||||
"48","1","U5","LM1117-3.3","Regulator_Linear:LM1117-3.3","TO_SOT_Packages_SMD:SOT-223-3_TabPin2","http://www.ti.com/lit/ds/symlink/lm1117.pdf",""
|
||||
"49","1","U6","IP4220CZ6","Power_Protection:NUP4202","Package_SO:TSOP-6_1.65x3.05mm_P0.95mm","http://www.onsemi.com/pub_link/Collateral/NUP4202W1-D.PDF",""
|
||||
|
||||
|
Can't render this file because it has a wrong number of fields in line 7.
|
@ -1,11 +1,10 @@
|
||||
/*
|
||||
* main.c
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -14,11 +13,10 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "buttons.h"
|
||||
#include "can.h"
|
||||
#include "hardware.h"
|
||||
#include "proto.h"
|
||||
@ -66,13 +64,13 @@ static char *get_USB(){
|
||||
}
|
||||
|
||||
int main(void){
|
||||
uint32_t lastT = 0;
|
||||
uint8_t ctr, len;
|
||||
CAN_message *can_mesg;
|
||||
char *txt;
|
||||
sysreset();
|
||||
SysTick_Config(6000, 1);
|
||||
gpio_setup();
|
||||
tim1_setup();
|
||||
USB_setup();
|
||||
CAN_setup(100);
|
||||
RCC->CSR |= RCC_CSR_RMVF; // remove reset flags
|
||||
@ -80,10 +78,7 @@ int main(void){
|
||||
|
||||
while (1){
|
||||
IWDG->KR = IWDG_REFRESH; // refresh watchdog
|
||||
if(lastT && (Tms - lastT > 199)){
|
||||
LED_off(LED0);
|
||||
lastT = 0;
|
||||
}
|
||||
process_keys();
|
||||
can_proc();
|
||||
usb_proc();
|
||||
if(CAN_get_status() == CAN_FIFO_OVERRUN){
|
||||
@ -92,9 +87,6 @@ int main(void){
|
||||
}
|
||||
can_mesg = CAN_messagebuf_pop();
|
||||
if(can_mesg && isgood(can_mesg->ID)){
|
||||
LED_on(LED0);
|
||||
lastT = Tms;
|
||||
if(!lastT) lastT = 1;
|
||||
if(ShowMsgs){ // new data in buff
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
len = can_mesg->length;
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* proto.c
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,11 +13,10 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "buttons.h"
|
||||
#include "can.h"
|
||||
#include "hardware.h"
|
||||
#include "proto.h"
|
||||
@ -29,7 +26,7 @@
|
||||
|
||||
extern volatile uint8_t canerror;
|
||||
|
||||
uint8_t ShowMsgs = 07;
|
||||
uint8_t ShowMsgs = 0;
|
||||
uint16_t Ignore_IDs[IGN_SIZE];
|
||||
uint8_t IgnSz = 0;
|
||||
static char buff[BUFSZ+1], *bptr = buff;
|
||||
@ -57,17 +54,17 @@ void addtobuf(const char *txt){
|
||||
while(*txt) bufputchar(*txt++);
|
||||
}
|
||||
|
||||
char *omit_spaces(char *buf){
|
||||
char *omit_spaces(const char *buf){
|
||||
while(*buf){
|
||||
if(*buf > ' ') break;
|
||||
++buf;
|
||||
}
|
||||
return buf;
|
||||
return (char*) buf;
|
||||
}
|
||||
|
||||
// THERE'S NO OVERFLOW PROTECTION IN NUMBER READ PROCEDURES!
|
||||
// read decimal number
|
||||
static char *getdec(char *buf, uint32_t *N){
|
||||
static char *getdec(const char *buf, uint32_t *N){
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
@ -79,10 +76,10 @@ static char *getdec(char *buf, uint32_t *N){
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
return (char *)buf;
|
||||
}
|
||||
// read hexadecimal number (without 0x prefix!)
|
||||
static char *gethex(char *buf, uint32_t *N){
|
||||
static char *gethex(const char *buf, uint32_t *N){
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
@ -103,10 +100,10 @@ static char *gethex(char *buf, uint32_t *N){
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
return (char *)buf;
|
||||
}
|
||||
// read binary number (without 0b prefix!)
|
||||
static char *getbin(char *buf, uint32_t *N){
|
||||
static char *getbin(const char *buf, uint32_t *N){
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
@ -118,7 +115,7 @@ static char *getbin(char *buf, uint32_t *N){
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
return (char *)buf;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -127,7 +124,7 @@ static char *getbin(char *buf, uint32_t *N){
|
||||
* @param N - the number read
|
||||
* @return pointer to first non-number symbol in buf (if it is == buf, there's no number)
|
||||
*/
|
||||
char *getnum(char *txt, uint32_t *N){
|
||||
char *getnum(const char *txt, uint32_t *N){
|
||||
if(*txt == '0'){
|
||||
if(txt[1] == 'x' || txt[1] == 'X') return gethex(txt+2, N);
|
||||
if(txt[1] == 'b' || txt[1] == 'B') return getbin(txt+2, N);
|
||||
@ -167,13 +164,7 @@ static CAN_message *parseCANmsg(char *txt){
|
||||
return NULL;
|
||||
}
|
||||
canmsg.data[ctr++] = (uint8_t)(N&0xff);
|
||||
//printu(N); SEND(", hex: ");
|
||||
//printuhex(N); newline();
|
||||
}while(1);
|
||||
/*if(*n){
|
||||
SEND("\nUnusefull data: ");
|
||||
SEND(n);
|
||||
}*/
|
||||
if(canmsg.ID == 0xffff){
|
||||
SEND("NO ID given, send nothing!\n");
|
||||
return NULL;
|
||||
@ -226,6 +217,10 @@ TRUE_INLINE void addIGN(char *txt){
|
||||
SEND("No ID given");
|
||||
return;
|
||||
}
|
||||
if(N == CANID){
|
||||
SEND("You can't ignore self ID!");
|
||||
return;
|
||||
}
|
||||
if(N > 0x7ff){
|
||||
SEND("ID should be 11-bit number!");
|
||||
return;
|
||||
@ -322,8 +317,8 @@ static void add_filter(char *str){
|
||||
SEND("No bank# given");
|
||||
return;
|
||||
}
|
||||
if(N > STM32F0FBANKNO-1){
|
||||
SEND("bank# > 27");
|
||||
if(N == 0 || N > STM32F0FBANKNO-1){
|
||||
SEND("0 (reserved for self) < bank# < 28 (max bank# is 27)!!!");
|
||||
return;
|
||||
}
|
||||
uint8_t bankno = (uint8_t)N;
|
||||
@ -397,6 +392,69 @@ static void add_filter(char *str){
|
||||
printu(nfilt); SEND(" parameters");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ledsOp - turn on/off LEDs
|
||||
* @param str - LED number (0..3)
|
||||
* @param state = 1 to turn on, 0 to turn off (toggling only available for CAN bus commands)
|
||||
*/
|
||||
static void ledsOp(const char *str, uint8_t state){
|
||||
uint32_t N;
|
||||
char *x = getnum(str, &N);
|
||||
if(!x || x == str || N > LEDSNO - 1){
|
||||
SEND("Wrong LED number\n");
|
||||
return;
|
||||
}
|
||||
if(state) LED_on(N);
|
||||
else LED_off(N);
|
||||
SEND("LED"); printu(N); SEND(" is ");
|
||||
if(state) SEND("on"); else SEND("off");
|
||||
}
|
||||
|
||||
// print current buttons state
|
||||
TRUE_INLINE void getBtnState(){
|
||||
const char *states[] = {[EVT_NONE] = NULL, [EVT_PRESS] = "pressed", [EVT_HOLD] = "holded", [EVT_RELEASE] = "released"};
|
||||
for(int i = 0; i < BTNSNO; ++i){
|
||||
uint32_t T;
|
||||
keyevent e = keystate(i, &T);
|
||||
if(e != EVT_NONE){
|
||||
SEND("The key "); printu(i);
|
||||
SEND(" is "); addtobuf(states[e]); SEND(" at ");
|
||||
printu(T); NL();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TRUE_INLINE void getPWM(){
|
||||
volatile uint32_t *reg = &TIM1->CCR1;
|
||||
for(int n = 0; n < 3; ++n){
|
||||
SEND("PWM");
|
||||
bufputchar(n);
|
||||
bufputchar('=');
|
||||
printu(*reg++);
|
||||
bufputchar('\n');
|
||||
}
|
||||
sendbuf();
|
||||
}
|
||||
|
||||
TRUE_INLINE void changePWM(char *str){
|
||||
str = omit_spaces(str);
|
||||
uint32_t N, pwm;
|
||||
char *nxt = getnum(str, &N);
|
||||
if(nxt == str || N > 2){
|
||||
SEND("Nch = 0..2");
|
||||
return;
|
||||
}
|
||||
str = omit_spaces(nxt);
|
||||
nxt = getnum(str, &pwm);
|
||||
if(nxt == str || pwm > 255){
|
||||
SEND("PWM should be from 0 to 255");
|
||||
return;
|
||||
}
|
||||
volatile uint32_t *reg = &TIM1->CCR1;
|
||||
reg[N] = pwm;
|
||||
SEND("OK, changed");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief cmd_parser - command parsing
|
||||
* @param txt - buffer with commands & data
|
||||
@ -412,7 +470,7 @@ void cmd_parser(char *txt){
|
||||
addIGN(txt + 1);
|
||||
goto eof;
|
||||
break;
|
||||
case 'b':
|
||||
case 'C':
|
||||
CANini(txt + 1);
|
||||
goto eof;
|
||||
break;
|
||||
@ -424,14 +482,29 @@ void cmd_parser(char *txt){
|
||||
set_flood(parseCANmsg(txt + 1));
|
||||
goto eof;
|
||||
break;
|
||||
case 'o':
|
||||
ledsOp(txt + 1, 0);
|
||||
goto eof;
|
||||
break;
|
||||
case 'O':
|
||||
ledsOp(txt + 1, 1);
|
||||
goto eof;
|
||||
break;
|
||||
case 's':
|
||||
case 'S':
|
||||
sendCANcommand(txt + 1);
|
||||
goto eof;
|
||||
break;
|
||||
case 'W':
|
||||
changePWM(txt + 1);
|
||||
goto eof;
|
||||
break;
|
||||
}
|
||||
if(txt[1] != '\n') *txt = '?'; // help for wrong message length
|
||||
switch(_1st){
|
||||
case 'b':
|
||||
getBtnState();
|
||||
break;
|
||||
case 'd':
|
||||
IgnSz = 0;
|
||||
break;
|
||||
@ -441,19 +514,11 @@ void cmd_parser(char *txt){
|
||||
Jump2Boot();
|
||||
break;
|
||||
case 'I':
|
||||
CAN_reinit(0);
|
||||
SEND("CAN ID: "); printuhex(CANID);
|
||||
break;
|
||||
case 'l':
|
||||
list_filters();
|
||||
break;
|
||||
case 'o':
|
||||
ledsON = 0;
|
||||
LED_off(LED0);
|
||||
LED_off(LED1);
|
||||
break;
|
||||
case 'O':
|
||||
ledsON = 1;
|
||||
break;
|
||||
case 'p':
|
||||
print_ign_buf();
|
||||
break;
|
||||
@ -471,25 +536,31 @@ void cmd_parser(char *txt){
|
||||
case 'T':
|
||||
SEND("Time (ms): ");
|
||||
printu(Tms);
|
||||
newline();
|
||||
break;
|
||||
case 'w':
|
||||
getPWM();
|
||||
return;
|
||||
break;
|
||||
default: // help
|
||||
SEND(
|
||||
"'a' - add ID to ignore list (max 10 IDs)\n"
|
||||
"'b' - reinit CAN with given baudrate\n"
|
||||
"'b' - get buttons' state\n"
|
||||
"'C' - reinit CAN with given baudrate\n"
|
||||
"'d' - delete ignore list\n"
|
||||
"'D' - activate DFU mode\n"
|
||||
"'f' - add/delete filter, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]\n"
|
||||
"'F' - send/clear flood message: F ID byte0 ... byteN\n"
|
||||
"'I' - reinit CAN\n"
|
||||
"'I' - read CAN ID\n"
|
||||
"'l' - list all active filters\n"
|
||||
"'o' - turn LEDs OFF\n"
|
||||
"'O' - turn LEDs ON\n"
|
||||
"'o' - turn nth LED OFF\n"
|
||||
"'O' - turn nth LED ON\n"
|
||||
"'p' - print ignore buffer\n"
|
||||
"'P' - pause/resume in packets displaying\n"
|
||||
"'R' - software reset\n"
|
||||
"'s/S' - send data over CAN: s ID byte0 .. byteN\n"
|
||||
"'T' - get time from start (ms)\n"
|
||||
"'w' - get PWM settings\n"
|
||||
"'W' - set PWM @nth channel (ch: 0..2, PWM: 0..255)\n"
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* proto.h
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,10 +13,7 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef __PROTO_H__
|
||||
@ -54,8 +49,8 @@ void printu(uint32_t val);
|
||||
void printuhex(uint32_t val);
|
||||
void sendbuf();
|
||||
|
||||
char *omit_spaces(char *buf);
|
||||
char *getnum(char *buf, uint32_t *N);
|
||||
char *omit_spaces(const char *buf);
|
||||
char *getnum(const char *buf, uint32_t *N);
|
||||
|
||||
uint8_t isgood(uint16_t ID);
|
||||
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* usb.c - base functions for different USB types
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,10 +13,7 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "usb.h"
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* usb.h
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,11 +13,9 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __USB_H__
|
||||
#define __USB_H__
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* usb_defs.h
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,10 +13,7 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* usb_lib.c
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,10 +13,7 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
/*
|
||||
* geany_encoding=koi8-r
|
||||
* usb_lib.h
|
||||
* This file is part of the canrelay project.
|
||||
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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 2 of the License, or
|
||||
* 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,
|
||||
@ -15,10 +13,7 @@
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
BIN
F0-nolib/usbcan_relay/usbcan.bin
Normal file → Executable file
BIN
F0-nolib/usbcan_relay/usbcan.bin
Normal file → Executable file
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user