STM32: Nucleo, BluePill...
1. CAN Sniffer - BluePill F103Cx
- Potrzebne rzeczy:
- Płytka BluePill - u mnie STM32F103C6/C8
- Moduł Tranceivera CAN - u mnie SN65HVD230
- Moduł konwertera USB/RS232 - u mnie CH340
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
uint8_t rx_byte;
int led_status = 0;
/* USER CODE END PV */
Prototyp funkcji
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
/* USER CODE END PFP */
a następnie kod funkcji,
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()
HAL_UART_Receive_IT(&huart2, &rx_byte, 1) ;
/* USER CODE END 2 */
W pętli while() dodajemy kod migania diodą LED
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 + CH340Arduino 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)