STM32F103C8T6 7-segment LED ve UART kullanımı

Linuxginar

Gigapat
Katılım
4 Temmuz 2017
Mesajlar
7.537
Makaleler
6
Çözümler
136
Yer
Izmir
UART ve 7-segment LED kullanimini anlamak icin yazdigim bir proje, UART'tan gelen 1-2-3-4-5-6-7-8-9 ve '.' seklinde sayilar ve noktayi aliyor ve Switch Case kullanarak 7-segment LED'e yaziyor.
1657487243808.png

Kaynak koduna buradan ulasabilirsiniz.
1657487476331.png

Sag ustteki LED'i gormezden gelin, PWM'i TIM1 (Advanced Timer) ile calistirana kadar kullandim. A8'de PWM sinyali var.


4 olmasinin nedeni ornegin "screen" komutu ile seri port acip 4 tusuna basmamdan. 9'a bassam farkli 5'e bassam farkli olacak ve o sayilari gosterecekti.

Yorumlarinizi bekliyorum.

Ek ozellikler ekledim, 'r' tusuna basildiginda Display resetlenecek ve 'l' tusuna basildiginda 1'den 9'a kadar 1 saniye araliklarla sayilacak.
 
Son düzenleme:
Başlangıç için güzel.
Ama her projede yalnızca 1 tane segment display için bu kadar pin kullanacak olsak işimiz zor... En kısa zamanda shift register mantığını öğrenip ve örneğin 74HC595 tarzı entegreleri projelerinize dahil etmeye çalışın. O zaman projeleriniz çok daha kolay olacaktır.

Kolay gelsin.
 
Başlangıç için güzel.
Ama her projede yalnızca 1 tane segment display için bu kadar pin kullanacak olsak işimiz zor... En kısa zamanda shift register mantığını öğrenip ve örneğin 74HC595 tarzı entegreleri projelerinize dahil etmeye çalışın. O zaman projeleriniz çok daha kolay olacaktır.

Kolay gelsin.
Degerli yorumunuz icin cok cok tesekkur ederim hocam, 74HC595'in sadece adini duyuyordum. Temin edip ogrenecegim en kisa zamanda.

Degerli yorumunuz icin cok cok tesekkur ederim hocam, 74HC595'in sadece adini duyuyordum. Temin edip ogrenecegim en kisa zamanda.
Merhabalar hocam, unutmus olmam gerek kutumda bir tane 74HC595 buldum. Bugun datasheet'ini okuyup biraz ogrendim ve su an kullanabiliyorum.
C:
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/usart.h>
#include <libopencm3/stm32/spi.h>
#include <stdio.h>
#include <string.h>

static void clock_setup(void)
{
        rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]);
}



static void
uart_setup(void) {

                rcc_periph_clock_enable(RCC_GPIOA);
                rcc_periph_clock_enable(RCC_GPIOB);
        rcc_periph_clock_enable(RCC_USART1);
       gpio_set_mode(GPIOA,
                GPIO_MODE_OUTPUT_50_MHZ,
                GPIO_CNF_OUTPUT_ALTFN_PUSHPULL,
                GPIO_USART1_TX);
        usart_set_baudrate(USART1,115200);
        usart_set_databits(USART1,8);
        usart_set_stopbits(USART1,USART_STOPBITS_1);
        usart_set_mode(USART1,USART_MODE_TX_RX);
        usart_set_parity(USART1,USART_PARITY_NONE);
        usart_set_flow_control(USART1,USART_FLOWCONTROL_NONE);
        usart_enable(USART1);
}

static void spi_setup(void) {
        rcc_periph_clock_enable(RCC_SPI1);
        //gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO3| GPIO4 | GPIO5);

        gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO7 | GPIO6 | GPIO5);
        // gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO7 | GPIO6 | GPIO5);

        spi_reset(SPI1);
        spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_4, SPI_CR1_CPOL_CLK_TO_0_WHEN_IDLE,
                SPI_CR1_CPHA_CLK_TRANSITION_1, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST);
        // spi_set_nss_high(SPI1);
        spi_set_baudrate_prescaler(SPI1, 4);
        spi_enable(SPI1);
}

int main(void)
{
        clock_setup();
        uart_setup();
        spi_setup();
        while(1) {
        gpio_clear(GPIOA, GPIO6);
        spi_send(SPI1, 17);
        for(int i=0;i<1000*1000*10;i++) {}
        gpio_set(GPIOA, GPIO6); // SHCP

        }
        return 0;
}

Su sekilde bir kod yazip 74HC595'i calistirabildim. Size bana kazandirmis oldugunuz en az 6 pin icin tesekkur ediyorum :)
 
Son düzenleme:

Yeni konular

Geri
Yukarı