HOME
HELP
CONTACT
ABOUT
ACCOUNT
==================================================================================================================
Programowanie, Aplikacje
Poradniki, Dokumentacje
Projekty elektroniczne
Pobieranie Plików
------------------------------------------------------------------------------------------------------------------

Projekty Elektroniczne

STM32: Nucleo, BluePill...


1. CAN Sniffer - BluePill F103Cx


 

Ze względu że wybieramy mikrokontroler a nie płytkę, musimy skonfigurować go sami.

1. Konfiguracja mikrokontrolera.

a. Włączenie debugowania.

Żeby nie stracić możliwości programowania po pierwszynm zaprogramowaniu musimy włączyć deugowanie SYS->Debug = Serial Wire

b. Ustawienia zegrów.

BluePill ma zewnętrzne kwarce. Należy je teraz włączyć.

Pojawiły się nam na zielono piny skonfigurowane pod kwarce.

c. LED PC13.

Dodatkowo włączymy sobie diodę LED aby sygnalizować sobie jakieś zdażenia, np. przerwanie z USARTa bądź CANa.

Oraz nadajemy nazwą dla pinu aby nie myśleć na jakim pinie i porcie jest diona LED.

Ze względu na to że w BluePill dioda LED podłączona jest katodą do mikrokontrolera, musimy ją wyłączyć (wygasić) czyli na pin PC13 podać stan wysoki.

d. USART2

Kolejnym krokiem będzie włączenie i konfiguracja USART2. W zakładce Conectivity znajdujemy USART2 i wybieramy tryb Asynchronous.

W Parameter Settings ustawiamy nas interesujący Baud Rate = 250000 Bits/s,

oraz włączamy przerwania NVIC Settings->USART global interrupt

Piny USART2 przypisane z automatu to akurat dla tego iterfejsu i STM32F103Cx bez możliwości przemapowania, PA2 = USART2_TX, PA3 = USART2_RX.

e. Kod - Test przerwania USART

W pliku main.c,
Deklarujemy zmienne

/* USER CODE BEGIN PV */
uint8_t rx_byte;
int led_status = 0;
/* USER CODE END PV */

Prototyp funkcji

/* USER CODE BEGIN PFP */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
/* USER CODE END PFP */

a następnie kod funkcji,

/* USER CODE BEGIN 0 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
    if(huart == USART2){
        led_status = 1;
        HAL_UART_Receive_IT(&huart2, &rx_byte, 1);
    }
}
/* USER CODE END 0 */

Uruchamiamy odbiór USART w pliku main.c w funkcji main()

/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart2, &rx_byte, 1) ;
/* USER CODE END 2 */

W pętli while() dodajemy kod migania diodą LED

/* USER CODE BEGIN 3 */
    if(led_status){
        led_status = 0;
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
        HAL_Delay(10);
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
    }
/* USER CODE END 3 */

Można też w funkcji przerwania dodać transmisję zwrotną przez USART (echo)

Na jutro (sobota):

Płytka breadboard z STM32F103C6 + SN65HVD230 + CH340
Arduino UNO + MCP2515 lub Breadboard z STM32F103C8 + SN65HVD230

10. Karta SD

Potrzebujemy moduł SD. Skożystam z dwóch:

Projekt pierwszy: gotowy moduł MicroSD

Użyjemy go z płytką BluePill STM32F103Cx


------------------------------------
Podłączenie:
CS   - PA4 GPIO_Output
SCK  - PA5 SPI1_SCK
MISO - PA6 SPI1_MISO
MOSI - PA7 SPI1_MOSI
oraz zasilanie 5V.
------------------------------------
Ustawienia SPI1:
Mode: Full-Duplex Master
Hardware NSS Dignal: Disable
------------------------------------
Ustawienia FATFS:
MAX_SS (Maxiimum Sector Size) - 4096
USE_LFN (Use Long Filename) - Enabled with static working buffer on the BSS


Projekt drugi: Data Logging Shield do Arduino

Do tego celu wykożystamy Nucleo (F303RE i F767ZI)

------------------------------------------------------------------------------------------------------------------