Dzień dobry, postanowiłem zacząć przygodę z rejestrami na mikrokontrolerach, skupiam się obecnie na STM32 C011 z racji, że znam już jakieś solidne podstawy HALowskie. I dostałem już niczym strzał z liścia pierwszy problem - mianowicie dioda dołączona do mikrokontrolera na wyjściu nie chce mrugać. Z dokumentacji mikrokontrolera wraz z całą płytką wynika, że piny GPIO są bezpośrednio połączone z cortexem więc nie ma potrzeby uruchamiania żadnych szyn ABP ani AHB a jedynie linię zegarową dla portów GPIO. Tak też zrobiłem, dodałem do tego rejestry ustawiające pin PA12 jako wyjście, push-pull, z niską prędkością załączania (low-speed) oraz jako no pull-up oraz no pull-dwon. Dioda dołączona do wyjścia mikrokontrolera połączona jest z rezystorem do masy i jest na pewno sprawna bo sprawdzałem czy nie jest aby przepalona. Funkcję odmierzającą czas też mam więc zastanawiam się co mogło mi umknąć przy ustawianiu rejestrów. Dla pewności czy aby funkcja opóźniająca nic nie psuje, wcześniej zamiast Delay wstawiłem po dwie pętle for nic nie robiące z dużą wartością aby zmarnować trochę czasu procesora i także nie działało.
Edit: dodałem manual do całej płytki
Poniżej mój kod:
Edit: dodałem manual do całej płytki
Poniżej mój kod:
#include <stdint.h>
#include "stm32c011xx.h"
__IO uint32_t Tick;
void SysTick_Handler(void){
Tick++;
}
void Delay(uint32_t Delay_ms){
uint32_t StartTime = Tick;
while(Tick < (StartTime + Delay_ms)){
}
}
int main(void) {
SysTick_Config(12000);
//RCC I/O port clock enable register GPIOA
RCC->IOPENR |= RCC_IOPENR_GPIOAEN;
//Ustawienie PA12 OUTPUT
GPIOA->MODER |= GPIO_MODER_MODE12_0;
GPIOA->MODER &= ~( GPIO_MODER_MODE12_1);
// Ustawienie PA12 jako Push-pull
GPIOA->OTYPER |= GPIO_OTYPER_OT12;
// Ustawienie PA12 jako low speed
GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED12_0;
GPIOA->OSPEEDR &= ~(GPIO_OSPEEDR_OSPEED12_1);
// Ustawienie PA12 jako no pull-up i no pull-down
GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD12_0);
GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD12_1);
//Wejście do nieskończonej pętli
while (1) {
//Ustaw PA12 HIGH
GPIOA->BSRR = GPIO_BSRR_BS12;
Delay(500);
//Ustaw PA12 LOW
GPIOA->BSRR = GPIO_BSRR_BR12;
Delay(500);
}
}