STM32F103C8T6 7-segment LED ve UART kullanımı

Katılım
4 Temmuz 2017
Mesajlar
7.554
Makaleler
6
Çözümler
137
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.

Kaynak koduna buradan ulasabilirsiniz.

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.
 
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:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…