STM32F1 SPI1 bugfix (#14679)

This commit is contained in:
BigTreeTech 2019-07-21 09:35:41 +08:00 committed by Scott Lahteine
parent 5b2fd3ad86
commit a38b9da672
4 changed files with 20 additions and 4 deletions

View file

@ -201,6 +201,11 @@ void HAL_init(void) {
#if PIN_EXISTS(LED) #if PIN_EXISTS(LED)
OUT_WRITE(LED_PIN, LOW); OUT_WRITE(LED_PIN, LOW);
#endif #endif
#if PIN_EXISTS(USB_CONNECT)
OUT_WRITE(USB_CONNECT_PIN, !USB_CONNECT_INVERTING); // USB clear connection
delay(1000); // Give OS time to notice
OUT_WRITE(USB_CONNECT_PIN, USB_CONNECT_INVERTING);
#endif
} }
/* VGPV Done with defines /* VGPV Done with defines

View file

@ -79,9 +79,19 @@ void spiBegin() {
* @details * @details
*/ */
void spiInit(uint8_t spiRate) { void spiInit(uint8_t spiRate) {
/**
* STM32F1 APB1 = 72MHz, APB2 = 36MHz, max SPI speed of this MCU if 18Mhz
* STM32F1 has 3 SPI ports, SPI1 in APB1, SPI2/SPI3 in APB2
* so the minimum prescale of SPI1 is DIV4, SPI2/SPI3 is DIV2
*/
#if SPI_DEVICE == 1
#define SPI_CLOCK_MAX SPI_CLOCK_DIV4
#else
#define SPI_CLOCK_MAX SPI_CLOCK_DIV2
#endif
uint8_t clock; uint8_t clock;
switch (spiRate) { switch (spiRate) {
case SPI_FULL_SPEED: clock = SPI_CLOCK_DIV2 ; break; case SPI_FULL_SPEED: clock = SPI_CLOCK_MAX ; break;
case SPI_HALF_SPEED: clock = SPI_CLOCK_DIV4 ; break; case SPI_HALF_SPEED: clock = SPI_CLOCK_DIV4 ; break;
case SPI_QUARTER_SPEED: clock = SPI_CLOCK_DIV8 ; break; case SPI_QUARTER_SPEED: clock = SPI_CLOCK_DIV8 ; break;
case SPI_EIGHTH_SPEED: clock = SPI_CLOCK_DIV16; break; case SPI_EIGHTH_SPEED: clock = SPI_CLOCK_DIV16; break;

View file

@ -148,7 +148,7 @@
// //
// USB connect control // USB connect control
// //
#define USB_CONNECT PC13 #define USB_CONNECT_PIN PC13
#define USB_CONNECT_INVERTING false #define USB_CONNECT_INVERTING false
#define SD_DETECT_PIN PC4 #define SD_DETECT_PIN PC4

View file

@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
#pragma once
#ifndef TARGET_STM32F1 #ifndef TARGET_STM32F1
#error "Oops! Select an STM32F1 board in 'Tools > Board.'" #error "Oops! Select an STM32F1 board in 'Tools > Board.'"
@ -102,7 +103,7 @@
// //
// USB connect control // USB connect control
// //
#define USB_CONNECT PC13 #define USB_CONNECT_PIN PC13
#define USB_CONNECT_INVERTING false #define USB_CONNECT_INVERTING false
#define SD_DETECT_PIN PC4 #define SD_DETECT_PIN PC4