STM32L-Discovery 개발 보드의 LCD 표시기로 작업합니다. 대중 주파수 분배기 블록에 대한 STM32 교육

일반 정보

STM32L-Discovery 개발 보드에는 6개의 14세그먼트 문자, 4개의 콜론(Colon), 4개의 도트(DP), 4개의 줄무늬(Bar)가 있는 액정 디스플레이(LCD)가 있습니다. 모든 세그먼트는 24개 세그먼트의 COM0, COM1, COM2, COM3 그룹으로 결합됩니다. 각 그룹에는 별도의 "공통 와이어"가 있습니다.


STM32L152RBT6 마이크로 컨트롤러는 디버그 보드에 설치됩니다. 마이크로컨트롤러에는 흑백 LCD 표시기를 제어하는 ​​LCD 컨트롤러가 내장되어 있습니다.
LCD 컨트롤러:

  1. 업데이트 빈도(프레임 속도 - LCD 정보가 업데이트되는 빈도)를 구성할 수 있습니다.
  2. 정적 및 다중 제어 모드 지원
  3. 지원 소프트웨어 설치차이
  4. 다양한 제어 전압 레벨 허용(최대 4개)
  5. 이중 버퍼링을 사용하여 표시된 정보의 무결성을 침해하지 않고 프로그램 실행 중에 언제든지 LCD_RAM ​​레지스터의 데이터를 업데이트할 수 있습니다.

LCD 컨트롤러 메모리 레지스터

STM32L152RB 마이크로 컨트롤러에는 COM0 - COM3 세그먼트 그룹에 해당하는 정보가 저장된 특수 LCD_RAM ​​레지스터가 있습니다. 각 그룹은 두 개의 32비트 레지스터에 해당합니다. 이 레지스터 수를 통해 마이크로컨트롤러는 LCD를 제어할 수 있습니다. 큰 금액개발 보드에 설치된 세그먼트보다

176개의 세그먼트로 구성된 LCD를 제어하려면 각각 44개의 세그먼트로 구성된 4개의 그룹 COM0 - COM3이 사용되고, 320개의 세그먼트로 구성된 LCD를 제어하려면 각각 40개의 세그먼트로 구성된 8개의 그룹 COM0 - COM7이 사용됩니다.



STM32L-Discovery 개발 보드는 96개 세그먼트가 있는 LCD를 사용하며 각각 24개 세그먼트로 구성된 COM0 - COM3의 4개 그룹으로 나뉩니다.


STM32L-Discovery 개발 보드의 LCD는 각 그룹의 두 번째 LCD_RAM ​​레지스터의 비트 S40, S41과 첫 번째 LCD_RAM ​​레지스터의 비트 S0-S27이 사용되는 방식으로 연결됩니다. 사용되는 레지스터 수를 줄이기 위해 비트 S40-S43의 정보는 리매핑 기능을 사용하여 여유 비트 S28-S31에 기록됩니다.

주파수 분배기 블록

주파수 분배기 블록(주파수 생성기)을 사용하면 LCD에서 32kHz ~ 1MHz 범위의 다양한 프레임 속도를 얻을 수 있습니다. 다음은 타이밍 신호 소스로 사용할 수 있습니다.
  1. 32kHz 주파수의 외부 저주파 발생기(LSE. 외부 저속)
  2. 37kHz 주파수의 내부 저주파 발생기(LSI. 저속 내부)
  3. 2,4,8, 16의 주파수 분배기와 1MHz의 최대 주파수를 갖춘 외부 RF 발생기입니다. (HSE. 고속외부)
정확한 타이밍을 달성하고 전압 오프셋을 줄이기 위해 직류 LCD 세그먼트를 통해 타이밍 신호 소스는 안정적이어야 합니다. LCDCLK 클록 신호는 LCD 컨트롤러로 전송됩니다. 클럭 신호 주파수는 LCD_FCR(Frame Control Register) 레지스터의 PS, DIV 비트에 의해 설정된 분할 인자에 따라 분할됩니다. 주파수 분배기 블록의 출력에서 ​​결과 주파수는 다음 공식으로 계산됩니다.

F ck_div =F LCDCLK / (2PS *(16+DIV))

프레임 속도는 다음 공식을 사용하여 계산됩니다.

F 프레임 =f ck_div *duty

듀티는 듀티 사이클(펄스 지속 시간과 주기의 비율)입니다. 한 프레임 동안 LCD_RAM[x], LCD_RAM ​​등의 레지스터 정보가 순차적으로 LCD에 표시됩니다. 개발 보드에 설치된 LCD의 경우 한 프레임에서 LCD 컨트롤러는 COM0 - COM3 세그먼트의 4개 그룹에서 정보를 출력해야 하므로 한 그룹의 제어 펄스 지속 시간은 프레임 지속 시간의 1/4이 됩니다. 의무=1/4.

LCD 제어

LCD를 제어하는 ​​방법에는 정적 제어 모드와 다중 제어 모드의 두 가지가 있습니다. 정적 표시를 사용하면 표시 비트의 각 세그먼트가 마이크로컨트롤러의 출력에 연결됩니다. LCD와 관련하여 STM32LDiscovery 디버깅 보드에는 6 * 14 = 84개의 마이크로 컨트롤러 핀이 필요합니다(콜론, 점 및 줄무늬 제외). 이러한 핀 수를 사용하면 다른 주변 장치를 연결하는 것이 불가능해집니다. STM32L152RB 마이크로컨트롤러에는 64개의 핀이 있습니다. 다중 제어 모드(동적 제어 모드)에서는 표시 숫자의 동일한 세그먼트가 그룹으로 결합됩니다. 정보는 인간의 눈으로 인지할 수 없는 빈도로 표시 숫자 부분의 교대 조명으로 인해 표시됩니다.

다중 제어를 사용하면 많은 수의 세그먼트를 제어할 수 있습니다. 각 요소를 별도로 제어하는 ​​대신 행과 열(COM 및 SEG)별로 주소를 지정할 수 있으므로 제어 회로가 단순화됩니다. 각 세그먼트에는 자체 제어선이 필요하지 않습니다. 선택한 세그먼트를 켜려면 전위차 COM과 SEG를 적용해야 합니다. 표시기의 첫 번째 숫자 작동 예(표시기는 "1:"을 표시함):


시간 t 0에서 표시기의 첫 번째 숫자


시간 t 1의 표시기 첫 번째 숫자


시간 t 2의 표시기 첫 번째 숫자


세그먼트를 LCD 핀에 연결하는 일반적인 다이어그램


LCD 핀과 마이크로 컨트롤러 포트의 연결 다이어그램

SEG 라인의 경우 제어 전압이 사용되며 그 레벨 수는 바이어스 계수에 의해 결정됩니다. 개발 보드의 LCD는 듀티=1/4 및 바이어스=1/3인 다중 제어 모드를 사용합니다. 듀티 및 바이어스 값은 DUTY 및 BIAS 비트의 LCD_CR(컨트롤 레지스터) 레지스터를 통해 설정됩니다.

관행

마이크로컨트롤러 포트 구성

LCD를 제어하려면 마이크로컨트롤러 포트를 그에 맞게 구성해야 합니다.
  1. 출구로
  2. AF 11 대체 기능 사용
  3. 400kHz의 포트까지 출력 주파수를 갖습니다.
  4. 푸시-풀 작동 모드 사용
  5. 풀업 저항 없음
포트가 대체 기능 모드에서 작동 중일 때 포트의 출력 데이터 버퍼는 주변 장치에서 들어오는 신호에 의해 제어됩니다. CMSIS 라이브러리의 헤더 파일 stm32lxx.h에는 모든 주변 장치 레지스터에 대한 설명과 이에 액세스하기 위한 구조가 포함되어 있습니다.

LCD 핀은 마이크로 컨트롤러의 GPIOA(PA1-PA3,PA8-PA10,PA15), GPIOB(PB3-PB5, PB8-PB15), GPIOC(PC0-PC3,PC6-PC11) 포트에 연결됩니다. LCD가 동작하기 위해서는 선택된 포트에 클럭 신호가 공급되어야 합니다. 마이크로컨트롤러의 GPIO 포트는 RCC(Reset and Clock Control) 시스템(클럭 및 리셋 시스템)의 AHB 버스에서 클럭됩니다. 클럭 신호는 RCC_AHBENR(AHB 주변 클럭 활성화 레지스터) 레지스터의 해당 비트를 설정하여 제공됩니다.

RCC_AHBENR을 등록합니다(그림은 처음 15비트를 나타냅니다).

GPIOA, GPIOB, GPIOC 포트의 경우 레지스터의 1을 0, 1, 2비트로 설정해야 합니다.

다음으로 비트마스크와 16진수 코드를 사용하여 레지스터에 정보를 쓰는 코드를 제공하겠습니다. 비트마스크를 사용하는 것이 더 편리하지만 16진수 코드로 작업하면 레지스터 작업의 본질을 이해할 수 있습니다.

RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); 또는 RCC->AHBENR = 0x7; /* 0x7=111 */

포트의 작동 모드를 나타내기 위해 GPIOx_MODER 레지스터(GPIO 포트 모드 레지스터)(x = A..H)가 사용됩니다. 모든 레지스터 비트는 MODERy 그룹으로 그룹화됩니다. 여기서 y는 해당 포트의 핀 번호입니다. 포트는 대체 기능 모드로 구성되어야 합니다. 핀을 담당하는 그룹에서 값을 10으로 설정합니다. GPIOA 포트의 경우 핀 1-3,8-10,15를 구성해야 합니다. 즉, 1을 3,5,7,17,19로 설정해야 합니다. 21,31자리.


GPIOx_MODER 등록(GPIO 포트 모드 레지스터)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | GPIO_MODER_MODER15_1); 또는 GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
마이크로컨트롤러 포트는 푸시풀 모드로 전환되어야 합니다. 이렇게 하려면 핀을 담당하는 비트의 GPIOx_OTYPER 레지스터(GPIO 포트 출력 유형 레지스터)에 1을 설정해야 합니다.


GPIOx_OTYPER 등록(GPIO 포트 출력형 레지스터)

GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); 또는 GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
두 옵션 모두 선택한 핀에 영향을 미칩니다. (GPIOA 포트의 경우 핀 1-3.8-10.15가 구성됩니다). 모든 포트 핀을 푸시풀 모드로 전환해야 하는 경우 레지스터에 다음 값을 쓸 수 있습니다.
GPIOA->OTYPER = 0x0;
포트에 대한 정보 출력 빈도를 지정하기 위해 GPIOx_OSPEEDR(GPIO 포트 출력 속도 레지스터) 레지스터가 사용됩니다. 모든 레지스터 비트는 OSPEEDRy 그룹으로 그룹화됩니다. 여기서 y는 해당 포트의 핀 번호입니다. 이 작업에서는 주파수를 400kHz로 설정해야 합니다. 핀을 담당하는 그룹에서는 값을 00으로 설정합니다.


GPIOx_OSPEEDR(GPIO 포트 출력 속도 레지스터)를 등록합니다.

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10 | GPIO_OSPEEDER_OSPEEDR15); 또는 GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
모든 핀에 대해 포트의 출력 주파수를 400kHz로 설정해야 하는 경우 레지스터에 값을 쓸 수 있습니다.
GPIOA->OSPEEDR = 0x0;
선택된 핀에 대한 풀업 및 풀다운 저항을 비활성화하려면 GPIOx_PUPDR 레지스터(GPIO 포트 풀업/풀다운 레지스터)를 사용하십시오. 모든 레지스터 비트는 PUPDRy 그룹으로 그룹화됩니다. 여기서 y는 해당 포트의 핀 번호입니다. 핀을 담당하는 그룹의 풀업 저항을 비활성화하려면 값을 00으로 설정합니다.


GPIOx_PUPDR 등록(GPIO 포트 풀업/풀다운 레지스터)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); 또는 GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
모든 핀에 대해 풀업 저항을 비활성화해야 하는 경우 레지스터에 값을 쓸 수 있습니다.
GPIOA->PUPDR = 0x0;
마이크로컨트롤러 포트에 대한 대체 기능을 사용하려면 낮은 핀(0~7)을 담당하는 GPIOx_AFRL(GPIO 대체 기능 하위 레지스터)과 상위 핀(8~15)을 담당하는 GPIOx_AFRH(GPIO 대체 기능 상위 레지스터) 두 개의 레지스터가 필요합니다. ,이 사용됩니다. 모든 레지스터 비트는 AFRLy 및 AFRHy 그룹으로 그룹화됩니다. 여기서 y는 해당 포트의 핀 번호입니다. 대체 기능 AF11을 사용하도록 포트를 구성해야 하며, 이를 위해 핀을 담당하는 그룹을 1011로 설정해야 합니다.


GPIOx_AFRL 등록(GPIO 대체 기능 하위 레지스터)


GPIOx_AFRH 레지스터(GPIO 대체 기능 상위 레지스터)

이렇게 하려면 레지스터에 다음 값을 써야 합니다.
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – GPIOx_AFRL 레지스터에 값을 씁니다.
AFR = 0xB0000BBB – GPIOx_AFRH 레지스터에 값을 씁니다.

GPIOB 및 GPIOC 포트의 해당 핀에 대한 설정은 동일한 방식으로 이루어집니다.

LCD 컨트롤러 설정

다른 주변 장치와 마찬가지로 LCD 컨트롤러로 작업할 때는 클록 신호를 공급해야 합니다. 클럭 신호는 전력 관리 시스템에도 공급됩니다. 컨트롤러와 전원 관리 시스템은 클로킹을 위해 APB1 버스를 사용합니다. RCC_APB1ENR(APB1 주변 장치 클럭 활성화 레지스터) 레지스터에서 클럭킹을 활성화하려면 비트 9와 28에 1을 설정해야 합니다.


RCC_APB1ENR 레지스터(APB1 주변 장치 클럭 활성화 레지스터)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; 또는 RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
LCD 컨트롤러가 작동하려면 클록 신호의 소스를 지정해야 합니다. 소스는 RCC_CSR 레지스터에 지정됩니다. 기본적으로 이 레지스터에 쓰기는 비활성화되어 있습니다. RCC_CSR 레지스터의 쓰기 보호가 PWR_CR 전원 제어 레지스터에서 제거됩니다. RCC_CSR 레지스터는 RTC 및 LCD 컨트롤러의 클럭 소스를 제어합니다.
RCC_CSR 레지스터에 쓰기는 PWR_CR 레지스터의 비트 8을 1로 설정하여 활성화됩니다.


PWR_CR 레지스터(PWR 전력 제어 레지스터)

PWR->CR |= PWR_CR_DBP; 또는 PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
LCD 컨트롤러(및 RTC 클럭)의 클럭 소스를 변경하려면 먼저 RCC_CSR 레지스터(제어/상태 레지스터)에서 RTCRST 비트(1을 비트 23으로 설정)를 설정하여 클럭 소스를 재설정해야 합니다.


RCC_CSR(제어/상태 레지스터) 등록

RCC->CSR |= RCC_CSR_RTCRST;
또는 "|=" 연산자를 사용하여 레지스터에 값을 씁니다. 가치
기본 레지스터는 0x0과 다릅니다.
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
새로운 클럭 소스를 선택하려면 RTCRST 비트를 제거해야 합니다:
RCC->CSR &= ~RCC_CSR_RTCRST; 또는 RCC->CSR &= ~0x800000;
외부 저주파 발생기가 클록 신호 소스로 선택됩니다. RCC_CSR 레지스터에서 생성기를 켜려면 LSEON 비트(1 ~ 8비트 설정)를 설정해야 합니다.
RCC->CSR |= RCC_CSR_LSEON; 또는 RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
발전기를 켠 후 안정화하는 데 시간이 걸립니다. 생성기의 준비 상태는 RCC_CSR 레지스터의 LSERDY 비트 하드웨어 설정으로 확인됩니다.
while(!(RCC->CSR&RCC_CSR_LSERDY));
외부 저주파 발생기를 클럭 소스로 선택하려면 RTCSEL 그룹에서 RCC_CSR 레지스터를 01로 설정하면 됩니다.
RCC->CSR |= RCC_CSR_RTCSEL_LSE; 또는 RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
LCD 컨트롤러에서 설치해야합니다 원하는 모드편견. 이렇게 하려면 LCD_CR 레지스터(LCD 제어 레지스터)에서 BIAS 그룹의 값을 10으로 설정해야 합니다. 비트를 설치하기 전에 "쓰레기" 비트를 제거해야 합니다.


LCD_CR 등록(LCD 제어 레지스터)

비트 재설정:
LCD->CR &= ~LCD_CR_BIAS; 또는 LCD->CR &= ~0x60;
비트마스크를 사용하여bias=1/3 모드 선택:
LCD->CR |= LCD_CR_BIAS_1; 또는 LCD->CR |= 0x40;
모드 듀티를 1/4로 설정합니다. 이를 위해 먼저 모든 비트를 재설정합니다.
LCD->CR &=~LCD_CR_DUTY; 또는 LCD->CR &= ~0x1C;
LCD_CR 레지스터의 DUTY 그룹에 값 011을 설정합니다.
모드 듀티=1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; 또는 LCD->CR |= 0xС;
핀 재할당 기능을 활성화합니다. 이렇게 하려면 LCD_CR 레지스터의 1~7비트를 설정하십시오.
LCD->CR |= LCD_CR_MUX_SEG; 또는 LCD->CR |= 0x80;
LCDCLK 클록 신호의 주파수 분할 계수 값을 설정합니다. 계수 값은 LCD_FCR 레지스터(LCD 프레임 제어 레지스터)에서 설정됩니다. 먼저 모든 비트를 지운 다음 필요한 비트를 설정합니다.


LCD_FCR(LCD 프레임 제어 레지스터) 등록

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; 또는 LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
클럭 신호 주파수 분할 계수의 값은 ck_ps = LCDCLK/16, ck_div = ck_ps/17과 동일하게 설정됩니다. 이렇게 하려면 1~24 및 18자리 숫자를 설정합니다.
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
원하는 대비 수준을 설정하려면 CC 그룹에서 값 010을 설정하고 먼저 이전 값에서 비트를 지워야 합니다.
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; 또는 LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
모든 값을 설정한 후 LCD_FCR 레지스터를 동기화하는 데 약간의 시간이 걸립니다. 레지스터 동기화는 하드웨어의 LCD_SR(LCD 상태 레지스터) 레지스터에 있는 FCRSF 비트를 설정하여 확인됩니다.

LCD_SR 등록(LCD 상태 레지스터)

동안(!(LCD->SR&LCD_SR_FCRSR));
LCD의 전압 소스로 V LCD를 형성하기 위한 내부 승압 컨버터를 선택했습니다. 이를 위해 LCD_CR 레지스터(LCD 제어 레지스터)의 첫 번째 비트를 0으로 설정합니다.
LCD->CR &= ~LCD_CR_VSEL; 또는 LCD->CR &= ~0x2;
LCD_CR 레지스터(LCD 제어 레지스터) 비트를 0으로 설정하면 LCD 컨트롤러의 작동이 활성화됩니다.
LCD->CR |= LCD_CR_LCDEN; 또는 LCD->CR |= 0x1;
내부 승압 컨버터를 전압 소스로 설치한 후 준비가 될 때까지 기다려야 합니다. 준비 상태는 LCD_SR 레지스터(LCD 상태 레지스터)에서 RDY 비트의 하드웨어 설정으로 확인됩니다.
while(!(LCD->SR&LCD_SR_RDY));
LCD 컨트롤러를 작동시킨 후 준비될 때까지 기다려야 합니다. 준비 상태는 LCD_SR 레지스터(LCD 상태 레지스터)에서 ENS 비트의 하드웨어 설정을 통해 확인됩니다.
while(!(LCD->SR&LCD_SR_ENS));

LCD에 이미지 형성

모든 표시기 세그먼트는 각각 24개의 세그먼트(SEG0-SEG23)가 있는 COM0 - COM3 그룹으로 결합됩니다. 세그먼트에 대한 정보는 LCD 컨트롤러 메모리의 LCD_RAM ​​레지스터에 저장됩니다. 배선 인쇄 회로 기판세그먼트 번호가 LCD_RAM ​​레지스터의 비트 번호와 일치하지 않는 것입니다.

LCD의 첫 번째 자리에 1을 표시하려면 세그먼트 1B, 1C를 켜야 합니다. 세그먼트 1B는 그룹 COM0에 속하고, 세그먼트 1C는 그룹 COM1에 속합니다. 따라서 이들에 대한 정보는 RAM(LCD_RAM0), RAM(LCD_RAM2) 레지스터에 각각 기록되어야 합니다. 세그먼트 1B는 LCD 출력 LCDSEG22를 담당하며 이에 대한 정보는 RAM 레지스터(LCD_RAM1)의 SEG40 비트에 저장됩니다. 리매핑 기능을 사용하면 LCDSEG22 세그먼트가 RAM 레지스터(LCD_RAM0)의 SEG28 비트에 할당됩니다. 1C 세그먼트는 LCD 출력 LCDSEG1을 담당하며 이에 대한 정보는 RAM 레지스터(LCD_RAM2)의 SEG1 비트에 저장됩니다.

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
메모리 레지스터에 값을 쓰기 전에 먼저 LCD로의 이전 데이터 전송이 완료되었는지 확인해야 합니다. 이를 위해 LCD_SR(LCD 상태 레지스터) 레지스터의 UDR(업데이트 디스플레이 요청) 비트를 확인합니다. LCD 컨트롤러에는 두 개의 출력 버퍼가 있으며, 정보는 첫 번째 버퍼에 입력되고 두 번째 버퍼에서 LCD로 출력됩니다. UDR 비트는 첫 번째 버퍼에서 두 번째 버퍼로 전송되는 동안 설정되어 LCD_RAM ​​레지스터에 쓰기가 방지됩니다.
while(LCD->SR & LCD_SR_UDR);
LCD_RAM ​​레지스터에 정보를 쓴 후 LCD_SR 레지스터(LCD 상태 레지스터)에서 UDR 비트를 설정해야 합니다(1에서 2비트로 설정).
LCD->SR |= LCD_SR_UDR; 또는 LCD->SR |= 0x4; /*0x4 = 100 */

이 장치에 대한 고통과 연구를 위해. 말하자마자 행동했습니다. 스카프는 수집되었고 우리는 갔다. 바로 이거 야! 우리 대화의 주제는 두 MK를 비교하는 것으로 바뀌었습니다. 위의 것은 ATmega328에 대한 것입니다. 왜 정확히 그들입니까? 두 MK 모두 TQFP-32 패키지에 있습니다. (사실, ATmega328도 DIP 패키지로 제공됩니다)
이제 그들의 내부를 자세히 살펴보겠습니다. 이해를 돕기 위해 필요한 모든 데이터를 하나의 테이블에 모았습니다.

옵션 ATmega328 STM32F030K6T6
비트 심도 8비트 32비트
플래시 32kb 32kb
스램 1kb 4kb
EEPROM 512b -
타이머 8비트 2개 -
타이머 16비트 1 PC 16개
PWM 3개 채널 6개 채널
USART 1 PC 1 PC
SPI 1 PC 1 PC
I2C 1개(TWI) 1 PC
ADC 8채널 10비트 16채널 12비트
영양물 섭취 2,7 - 5,5 2,4 - 3,6
속도 0~16MHz 48MHz(외부 4~32MHz 포함)
가격 160 - 170 문지름. 80 - 140 문지름.
표에서 볼 수 있듯이 STM32는 AVR보다 훨씬 더 흥미롭고 풍부합니다. 정말 작은 것이 하나 있습니다. STM32에는 EEPROM이 없지만 단순히 AVR을 완전히 죽이는 DMA가 있습니다. 사실, AVR은 Arduino와 쉬운 프로그래밍을 자랑합니다. 논쟁의 여지가 없지만 STM32에는 IAR용 코드를 생성하고 주변 장치 설정의 전체 루틴을 처리하는 STM32Cube가 있습니다. 그리고 AVR 관의 마지막 못은 RTOS입니다. 예, AVR에도 설치할 수 있지만 알아내야 하지만 STM32에서는 "FREERTOS" 상자를 확인하면 그게 전부입니다. 시스템 자체는 필요한 모든 작업을 수행하며, 우리가 해야 할 일은 스레드를 생성하고 그 안에 코드를 작성하는 것뿐입니다. 음, 이것은 단지 시작을 위한 것입니다. 사실 모든 것이 조금 더 복잡합니다. 간단히 말해서, 저는 STM32를 좋아하고 마침내 여러분을 이 플랫폼으로 끌어들이기 위해 Arduino를 책상 서랍에 넣어 처음부터 끝까지 보드를 만들고 작업 방법을 보여 드리겠습니다. 아, 깜빡했어요. 모든 STM32에는 SWD 디버거가 있습니다. 이는 SWDIO, SWCLK, GND의 3개 와이어로 구성되어 있으며 Proteus의 ATmega328과 달리 하드웨어에서 직접 코드 줄을 건너뛸 수 있습니다. 이를 위해서는 ST-LINK 범용 프로그래머만 있으면 됩니다. Discovery 보드나 별도의 프로그래머를 구입하시면 사용하실 수 있습니다. 그리고 이제 말에서 행동으로.
계획. 더 크게
이 보드를 AVR용 디버깅 보드용 모듈로 만들었습니다. 그러나 당신은 당신의 재량에 따라 보드를 배포함으로써 그것을 반복할 수 있습니다. (나는 기사 마지막 부분에 DipTrace에 대한 프로젝트를 게시할 것입니다.) 다이어그램에 무엇이 있습니까? 그리고 다이어그램은 AVR에 대한 간단한 하네스를 보여줍니다. 20p 커패시터 2개가 있는 8MHz 석영. AVR과 마찬가지로 ADC 지원을 위한 전원 공급 회로가 조립되어 있습니다. AVR과 같은 회로를 재설정하십시오. 유일한 차이점은 BOOT 회로입니다. AVR과 달리 모든 STM32에는 하드웨어 부트로더가 내장되어 있습니다. 기본적으로 USART에 연결되어 있습니다. 즉, BOOT0 핀을 전원 공급 장치에 누르고 MK를 다시 시작하면 Flash Loader Demonstrator 프로그램을 사용하여 프로그래머 없이 MK를 플래시할 수 있습니다. 이 기능이미 작동 가능한 장치가 있고 펌웨어를 업데이트해야 하는 경우 USB USART 어댑터만 있으면 유용합니다. 많은 사람들은 전원 공급 장치가 3.6V를 넘지 않기 때문에 STM32를 엉망으로 만들고 싶어하지 않습니다. 무의미한 말. 핀 테이블을 보면 모든 다리가 결과 없이 5V를 받을 수 있다는 것을 알 수 있습니다. 계속 진행합시다.

그리고 이것이 보드에 설치된 모습입니다.

이제 ST-LINK-GA 프로그래머를 SWD 커넥터에 연결합니다.

이제 모든 준비가 완료되었으므로 ST 웹사이트(페이지 맨 아래 링크)에서 최신 버전을 다운로드하세요. 설치하고 실행합니다.

새 프로젝트를 클릭합니다. 그리고 나타나는 창에서 컨트롤러를 찾습니다. 확인을 클릭하세요.

조금 생각한 후에. 프로그램은 다음과 같은 창을 표시합니다.

이것은 별도의 기사의 주제이므로 무엇과 이유를 설명하지 않겠습니다. 예를 들어, 이제 제가 보여드리는 대로 해보세요. 우리는 무엇을해야합니까. 우리는 발사할 것이다 운영 체제단일 스레드에서는 LED를 깜박입니다. 대포의 일종의 "Heloy Word"입니다.))) 이렇게 하려면 왼쪽 창에서 "FREERTOS" 비문 옆에 있는 더하기 기호를 클릭하고 드롭다운 목록에 체크 표시를 합니다.

또한 외부 석영을 선택하자마자 컨트롤러 오른쪽에 걸어야 하는 다리가 녹색으로 강조 표시됩니다. 다음으로 해야 할 일은 LED가 걸릴 다리를 선택하는 것입니다. 저는 B포트와 0번핀을 선택했고 갈퀴를 찾았는데 왜인지는 모르겠지만 처음 4핀의 출력콤을 거꾸로 뒤집어 놓았습니다. 따라서 포트 B에 혼란이 발생합니다. 이 문제는 내 보드에만 영향을 미칩니다. 그러나 이것이 MK의 작동을 막지는 못했습니다. 그래서 핀을 구성하십시오. 사실 STM을 사용하면 모든 핀이 여러 값을 가질 수 있지만 개별 입력/출력을 터치하면 출력에 대해 세 가지 옵션이 있을 수 있습니다. 공중 출력, 전원 공급 장치 플러스에 대한 풀업으로 출력, 공통 버스에 대한 풀업으로 출력. 기본적으로 STM32CubeMX는 다리를 공중에 매달아 놓습니다. 글쎄요, 그냥 작업을 확인하고 STM32의 성능을 보여주면 됩니다. 다리를 구성하려면 다리를 마우스 왼쪽 버튼으로 클릭하고 나타나는 창에서 GPIO_Output을 선택해야 합니다. MK가 너무 작으면 휠을 돌려서 확대할 수 있습니다.)))

다음 단계는 MK 클럭킹을 조정하는 것입니다. 사실 STM32는 이 문제에 대해 매우 불분명합니다. AVR과 달리 STM32는 입력에 4~32MHz 주파수의 석영이 있으며 버스에서는 48MHz까지 오버클럭할 수 있습니다. MK 내부에는 매우 복잡한 클러킹 시스템이 있지만 STM32CubeMX가 다시 우리를 도와줍니다. Clock Configuration 탭으로 이동하여 아래 그림과 같이 구성합니다.

그게 다야. 상단의 톱니바퀴 아이콘을 클릭하세요.

이와 같은 창이 나타납니다.

그리고 여기서 나는 말하는 것을 잊었습니다. IAR을 직접 다운로드하여 설치하세요. 공식에서 다운로드할 수 있지만 코드 양이 줄어들거나 토렌트에서 찾을 수 있습니다. 또는 여분의 돈이 많으면 라이센스를 구입할 수 있습니다. 글쎄요, 많은 사람들이 CodeVisionAVR의 길을 따를 것이라고 생각합니다. 일반적으로 이 문제는 귀하의 재량에 맡깁니다. 버전 7.40이 있습니다. 큐브로 돌아가자. 창에서 프로젝트 이름을 지정하지만 라틴어로만 IAR은 경로에 러시아어 문자를 좋아하지 않습니다. 그리고 프로젝트가 저장될 위치를 지정하세요. IDE 창에서 EWARM을 선택해야 합니다(기본값). 확인을 클릭하세요. 프로그램은 생각을 하고 다음과 같은 창을 표시합니다. ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ. 일반적으로 프로젝트 열기를 클릭합니다(탱크에 있는 경우 가운데 버튼).

창이 사라지고 대신 IAR과 프로젝트가 시작됩니다. 왼쪽에서 Aplication->User로 이동하여 main.c를 실행합니다. 이 코드 묶음은 STM32CubeMX가 우리를 위해 생성한 것입니다.

이제 이 공포를 어떻게 해야 할까요? 그러나 이를 위해서는 전체 기사 시리즈가 필요합니다.))) 이제 우리는 이 코드 조각을 찾습니다.

이것이 우리의 유일한 흐름입니다. 신체 내 for 루프(;;) 유일한 함수 osDelay(1);를 삭제하고 대신 이 코드를 작성합니다. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
osDelay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
osDelay(500);

아주 멋진. 이제 오른쪽 상단에 있는 녹색 화살표가 있는 버튼을 클릭하고 컴파일 및 다운로드를 기다리세요.

모든 것이 정확하고 오류가 없으면 프로그램은 전체 프로젝트를 조립하고 필요한 모든 것을 생성한 다음 펌웨어를 MK에 로드합니다. 그 후에는 디버깅 모드로 들어갑니다. 여기 있습니다. AVR맨의 꿈. 그것을 사용하고 싶은 참을 수 없는 욕구가 있다면 하드웨어를 한 줄씩 한 단계씩 진행할 수 있습니다. 그리고 프로그램이 어떻게 작동하는지 보고 싶다면 왼쪽 상단의 십자가를 누르고 LED가 깜박이는 것을 즐겨보세요.

그게 다야. 마이크로컨트롤러는 ChipResistor 매장에서 개당 78루블의 최저 가격으로 구입할 수 있습니다. 글쎄, 더 저렴하게 원한다면 작은 도매도 있습니다. 35 조각에서 이미 50 루블입니다.
DipTrace를 위한 프로젝트.
그리고 물론 비디오.


손님 12/31/15 10:35

최근 ATMEGA16에 주파수 측정기와 74 로직의 외부 8비트 카운터를 만들고 싶었지만 속도가 충분하지 않았습니다. 어셈블러에서 쓰기를 처리할 수 없습니다. 16비트로 외부 카운터를 펜싱하는 것은 고통스럽습니다. ass.AVR은 값싼 컨트롤러가 아닌 지난 세기입니다.저자를 지지하겠습니다. AVR은 단계가 지났고 stm32f100 칩과 CP2103 USB 어댑터 칩도 구입했는데 곧 모두가 AVR을 포기하게 될 것입니다.

알렉세이 12/31/15 12:26

나는 동의하지 않습니다. 그럼에도 불구하고 Arduino는 여전히 개발 중이며 많은 사람들이 이에 매료되어 있으며 후자는 AVR에서 작동합니다. STM에 가는 것은 다음 단계로 가는 것과 같습니다. 말하자면, 유치원부터 학교까지.

어노니머스 12.02.16 10:44

AVR과 STM32는 서로 경쟁하지 않는 프로세서입니다. 귀하의 접시에는 가장 중요한 매개변수가 포함되어 있지 않습니다. 이는 전류 소비량입니다!! 그리고 그들을 보면 눈물을 흘릴 수 있습니다. Atmega 328 - – 활성 모드: 0.2mA – 절전 모드: 0.1μA – 절전 모드: 0.75μA(32kHz RTC 포함) STM32F030K6T6 48MHz - 활성 모드: 주변 장치 켜짐 23.3mA 주변 장치 꺼짐 11.5mA - 정지 모드: 0.048mA STM32는 AVR보다 대략 100배 더 많은 전력을 무자비하게 소비합니다. 배터리로는 STM32 장치에 전원을 공급할 수 없습니다. 그러나 AVR은 몇 달 동안 작동합니다. 그래서 AVR을 포기하기는 어렵습니다. 모두 행운을 빌어 요.

알렉세이 02/12/16 10:54

그리고 아무도 AVR을 포기하라고 제안하지 않습니다. 단지 주변의 차이를 보여주고 있을 뿐입니다. 저는 여전히 AVR 라이브러리를 유지 관리하고 있으며 ATMega8A를 메인 MCU로 사용하고 있습니다.

세르게이 02/24/16 18:02

제 생각에는 새로운 STM32와 은퇴한 AVR을 비교하는 것이 다소 이상합니다. STM32를 ATMEL 컨트롤러와 비교하려면 ATSAM 제품군과 비교하되 AVR과는 비교하지 마십시오.

안드레이 02.24.16 18:06

이 연금 수급자는 누구입니까? AVR은 살아 있고 얼마나 오래 지속될 것인지를 아는 사람을 위해 계속해서 살아갈 것입니다. 그리고 표를 보면 제 생각에는 비교가 아키텍처가 아닌 주변부에 더 가깝습니다.

알렉세이 02.24.16 19:04

그럼 시작됩니다. 이제 AMD와 Intel에 대해 논의해 보겠습니다.

세르게이 02/24/16 22:02

허브에서 한 "전문가"는 AVR에는 표준 LCD를 연결하기 위한 병렬 버스가 없지만 STM32에는 있다고 썼습니다.

알렉세이 02.24.16 22:36

표준 LCD는 무엇을 의미하나요? FSMC에 관한 것인가요? 그래서 이것은 디스플레이용일 뿐만 아니라 메모리용이기도 합니다. 그냥 병렬버스. AVR에도 Mega8515와 같은 기능이 있습니다. SRAM은 래치 레지스터를 통해 여기에 연결될 수 있습니다.

세르제츠 02/25/16 06:24

알렉세이, 내가 무슨 말을하는거야?! 당신은 내 메시지의 의미를 이해하려고 노력조차 하지 않는 것 같습니다.

알렉세이 02/25/16 09:38

글쎄, 다른 회사의 두 개의 동일한 마이크로 컨트롤러를 비교하는 요점은 무엇입니까? 둘 다 ARM 코어에 있습니다. 정말 까다롭다면 AVR을 STM8과 비교해야 합니다. 그런 다음 주변부, 폼 팩터 및 가격의 근접성을 고수했습니다. 그리고 단지 다른 아키텍처.

아들란 03.06.16 17:40

안녕하세요. 누가 할 수 있는지 도와주세요. 설치됨 최신 버전쿠바 4.15, F1 라이브러리 1.4.0. EWARM에서 생성된 빈 프로젝트가 컴파일되지 않습니다. 오류가 100개가 넘습니다. 뭐가 될수 있었는지? 감사합니다 [이메일 보호됨]

알렉세이 06/03/16 20:48

Adlan, 가장 먼저 해야 할 일은 컴파일되지 않는 프로젝트를 업로드하는 것입니다.

문서 07/18/16 21:51

"AVR이 Arduino와 간단한 프로그래밍을 자랑하는 것은 사실입니다." 그는 무엇을 자랑할 수 있습니까? ;디

알렉세이 07/19/16 11:41

이것은 어리석은 비교입니다. 첫째, STM에는 Nucleo라는 Arduino와 유사한 것이 있습니다. 프로그램은 브라우저를 통해 온라인 IDE에 직접 작성됩니다. 하지만 개인적으로 돌의 장점이라면. 핵심 작동 주파수는 72MHz이며 AVR은 그러한 속도를 꿈도 꾸지 못했습니다. 물론 LED를 깜박이면 별 차이가 없지만 축과 주변기기들을 잔뜩 시동을 걸면 AVR이 터져버릴 것이다. 비트 용량 32는 8과는 거리가 멀습니다. STM의 주변 장치에는 I2C 3개, SPI 3개, UART 6개, USB, CAN, 이더넷이 포함될 수 있습니다. 거의 모든 것이 다시 매핑될 수 있습니다. 즉, mk의 다른 다리로 전송될 수 있습니다. DMA도 있는데, 이는 주변 장치 작업을 위한 독립적인 보조 프로세서입니다. 따라서 AVR 중단은 부업에서 초조하게 담배를 피우고 있습니다. 하드웨어 SDIO가 있습니다. 본격적인 작업 AVR의 목발 ISP가 아닌 CD 카드를 사용합니다. 일반적으로 더 많은 것이 있지만 AVR 정원의 가장 큰 돌은 소음 내성입니다. 전기 모터 근처에 케이블을 연결하여 AVR을 녹아웃시키는 것은 당연한 일이지만 STM을 시도해야 합니다. 그래서 나는 Arduino에 대해 비꼬는 것을 권장하지 않습니다.

손님 08/11/16 23:27

MICROCHIP이 AVR을 흡수했습니다!))))))))))

알렉세이 08/12/16 08:35

5년 전처럼 우리는 소식을 늦게 접했습니다.

블라디미르 08/17/16 22:56

알렉세이! 2016년 1월 Microchip은 Atmel을 35억 6천만 달러에 인수했습니다. 5년은 어떻게 될까요?

알렉세이 08/18/16 10:30

이것은 법적으로는 사실이지만 실제로는 2008년부터 계속되어 왔습니다. 그래서 정말 실수를 저질렀습니다. 5년이 아니라 8년 전입니다.))))

블라디미르 08/18/16 23:53

Alexey! stm32로 전환하기 시작했습니다! 자율 모드에서의 소비에 관해서는 모든 것을 클럭하지 말라고 조언합니다 그러면 소비 전류가 감소할 것입니다.

올렉 09.11.16 22:31

STM의 데이터시트에서는 AVR과 같은 시스템 클럭 CLK 소비 그래프를 찾을 수 없었습니다. 거기에 있는 플레이트에 따르면 STM32는 일반 모드와 유휴 모드 모두에서 완전히 손실됩니다. 예, 그리고 이 STM32에는 72MHz의 클럭이 없습니다. 최대 48MHz만 있습니다. 그게 전부이므로 32비트 8 beatnik AVR을 사용하더라도 더 나은 것으로 나타났습니다. 그런데 데이터 시트의 제조업체는 얼마나 많은 수를 쓰지 않았습니다. STM32 기계 사이클의 클럭 사이클이 있으므로 AVR의 경우 1클럭 주기에 비해 2클럭 주기로 판명되면 48/2 = 24 실제 MHz로 간주됩니다. 이는 AVR의 20MHz와 거의 같습니다. 그렇다면 질문은 - 여러분이 모두 이야기하고 있는 이 STM32의 기적은 어디에 있습니까?

어노니머스 09.11.16 23:03
알렉세이 11/10/16 00:23

나는 논쟁하고 싶지도 않습니다. 인텔과 AMD 중 어느 것이 더 좋나요? 아니면 Zhiguli 또는 Volga? STM에는 하드웨어 USB, CAN, 이더넷, SDIO 및 AVR이 꿈꿀 수 있는 기타 주변 장치가 많이 있습니다. 결국 모든 AVR이 신경질적으로 연기를 차단하는 직접 메모리 액세스 기능을 갖춘 독립 보조 프로세서인 DMA가 있습니다. 예를 들어 첫 번째 시리즈에는 UART 3개, SPI 2개, I2C 3개가 탑재되어 있습니다. 포트 리맵이 있어 보드를 분해하는 방법에 대해 걱정할 필요가 없습니다. AVR 작업을 좋아한다면 방해하는 사람과 함께 일하십시오. 지금까지도 나는 소규모 프로젝트에서 8분의 1의 성과를 거두고 있으며 불평하지 않습니다. 아, 그렇습니다. AVR을 스타터 옆에 붙이고 간섭으로 인해 어떻게 머리가 터지는지 지켜보세요. AVR에는 EMI 보호 기능이 없습니다. 따라서 AVR이 이러한 조건에서 죽기 때문에 PIK는 항상 자동차 경보기에 설치되었습니다. 논쟁을 벌이는 이유는 죽은 숫자입니다.

코넷 27.11.16 21:22

그런데 STM32에는 이미 Arduino가 있습니다. 이것은 Amperka와 JS의 모든 종류의 Espruino입니다. 또한 Atmel이 Microchip을 가져간 경우에는 나사로 조이십시오.

알렉세이 27.11.16 21:44

Espruino라는 이름은 당시 가장 유명한 취미 플랫폼인 Arduino를 패러디한 것이지만 Espruino는 고전적인 취미 플랫폼과 호환되지 않습니다. 아두이노 우노기계적으로나 프로그래밍적으로도 아닙니다.(Amperka 인용)
나는 또한 Nucleo 보드를 가지고 있으며 보드 자체의 기하학적 구조를 제외하고는 Arduino와 아무 관련이 없습니다.)))
일반적으로 본질적으로 현재 작업에 적합한 MK를 사용합니다.

안드레이 12/20/16 22:50

초과 지불을 좋아하는 사람: attiny2313-20의 가치가 있습니다 - 2Kb-flash /128bit-ram/16bit_ 타이머 -1/8bit_ 타이머 -1 =2.1$ vs stm32f103c8t6 64Kb-flash/20Kb-sram/16BIT 타이머(+ 듀얼용 데드 타임 제어) -채널 PWM 모드 ) -4/ADC-2/72MHz CPU/=2.3$. 제 생각에는 AVR을 사용하여 RLC 회로용 임피던스 측정기를 만드는 것은 거의 불가능하거나 10돌이 있습니다. 하지만 할 수 있습니다. STM 및 FFT(DMA 도움) 어떻게든 Mega10(정확도 1Hz)에서 주파수 측정기를 만들어 보았습니다. 속도가 충분하지 않았습니다(또는 시프트 레지스터가 있는 외부 32비트 카운터를 설치했습니다. 에서 유래).나는 1년 전에 AVR을 포기했는데, 알고 보니 AVR은 부유한 사람들을 위한 것이었습니다.

안드레이 12/20/16 22:53

ANONYMOUS는 다음과 같이 썼습니다. "그리고 여기에 러시아어로 된 STM32 설명의 또 다른 인용문이 있습니다."...
순간
전수
인터럽트
~ 전에
시작했다
실행
첫 번째

매니저
인터럽트
소비된다
오직
열둘
사이클
시계
신호"

이것은 사실입니다. 그러나 두 개의 32비트 숫자를 avr로 곱하면 분명히 8-10 클럭 사이클이 됩니다!

알렉세이 12/20/16 23:31

예, 이 할리바르가 시작된 것을 이미 후회합니다.))))

알렉산더 12/21/16 00:27

댓글 읽고 생각나네요.
샌드박스에 있는 두 아이
두두카 하나!
둘째, 삐!
먼저 두두카! (억양이 더 위협적임)
두 번째, 비비카! (좀 더 풍부한 억양으로)
첫 번째 두두카! (이미 비명을 지르고 있다)
두 번째 비비카!!! (거의 울음)
....
이 전투는 끝났고 둘 다 서서 울고 있습니다. 한 사람이 다른 사람보다 더 크게 울고 있습니다.)))

발 02/10/17 01:43

지연 없이 반복하면 주파수는 얼마나 될까요?
동안 (1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}

알렉세이 10.02.17 10:07

APB 버스에 있던 것

이고르 06/08/17 22:33

따라서 랩톱을 임베디드 시스템에 즉시 통합해 보겠습니다. STM보다 수백 배 더 낫고 주변 장치가 엄청나게 많고 이미 Wi-Fi와 블루투스가 있으며 프로그래머도 필요하지 않습니다. 바로 모니터가 있습니다. 프로그램을 작성하고 즉시 실행하기 위한 키보드이며 프로그래머와 디버거가 필요하지 않습니다.
이는 때때로 0.5미터 깊이의 구멍 두어 개를 파기 위해 별장에서 개인용 굴착기를 구입하는 것과 같습니다.
STM을 온도 조절기, 시계, 저울에 넣는 것은 제 생각에는 정상이 아닙니다. 그런데 네, 어때요? 비 휘발성 기억 장치, 그래서 온도 조절기를 만들고 온도를 설정하고 있는데 불이 꺼지니까 뭐, 설정이 없어져요. 그러나 추가 작업을 위해 한 번 구성해야 하는 임베디드 시스템에서는 값을 영원히 저장해야 합니다.

알렉세이 06/09/17 08:25

예를 들어 STM32F030F4P6 칩 딥의 가격은 48 루블이고 직접 아날로그 ATtiny2313의 가격은 98 루블입니다. 나는 그들 중 누구라도 온도 조절 장치를 만드는 데 충분할 것이라고 생각합니다. STM에 대한 메모리 보상은 모든 온도 센서에서 가능합니다. 예, 적어도 동일한 DS18B20에서는 가능합니다. 노트북의 경우 결제 승인 단말기에는 OS와 모니터가 설치된 PC가 있습니다. 그래서 그런 시스템도 있습니다. MK를 선택할 때에는 우선 가격이 더 저렴한 것을 선택하세요. 이것이 취미라면 납땜에 신경 쓰지 않도록 Arduino를 구입할 수 있으며 시스템을 생산하고 수백 개로 생산할 계획이라면 모든 페니가 중요합니다. 그리고 가격이 48일 때 MK에 50루블을 초과 지불하는 것은 감당할 수 없는 사치입니다.

루슬란 06/17/17 21:46

Alexey, IAR 프로그래밍 환경을 선택한 이유는 무엇입니까?
초보자가 선택하기에는 어떤 환경이 더 좋은가요? (그림과 같이 많은 힌트가 있습니다) 아트멜 스튜디오)?

알렉세이 06/17/17 22:07
루슬란 06/17/17 22:56
내가 "나쁘게" 보이지 않았다면 어떻게 해야 하는지 보거나 읽을 수 있는 링크를 알려주세요!
더 좋은 점은 비디오를 만드는 것입니다. 많은 초보자들이 (뿐만 아니라) 비디오를 보는 데 관심을 가질 것이라고 생각합니다!
미리 감사드립니다!
알렉세이 08/05/17 10:19
루슬란 22.11.17 12:17

내 말은 이거였어 https://www.youtube.com/watch?v=wOIlhRd-vN8
5~7분!!!

루슬란 22.11.17 12:18

Alexey, "열거형" 열거형으로 작업하는 방법을 알려주세요. 그렇지 않으면 그러한 정보가 어디에도 없고 비디오에 "C for the little ones"도 없지만 정말 필요합니다!
AVR을 가지고 놀 때는 열거 같은 기적을 본 적이 없었는데 이제는 STM에 관심이 있고 많이 있습니다! 그리고 그들과 협력하는 방법에 대한 정보가 없습니다!
다음은 실제 코드의 예입니다.


StatusCode MIFARE_Read(byte blockAddr, byte * buffer, byte * bufferSize);

StatusCode 열거는 어디에 있습니까?


열거형 StatusCode: 바이트(
STATUS_OK , // 성공
STATUS_ERROR , // 통신 오류
STATUS_COLLISION , // 충돌이 감지되었습니다.
STATUS_TIMEOUT , // 통신 시간이 초과되었습니다.
STATUS_NO_ROOM , // 버퍼가 충분히 크지 않습니다.
STATUS_INTERNAL_ERROR , // 내부 오류코드에서. 일어나지 말아야 할 일 ;-)
STATUS_INVALID , // 잘못된 인수입니다.
STATUS_CRC_WRONG , // CRC_A가 일치하지 않습니다.
STATUS_MIFARE_NACK = 0xff // MIFARE PICC가 NAK로 응답했습니다.
};

이것은 Arduino 라이브러리(C++)에서 가져온 것이지만 Keil은 이에 대해 맹세합니다!
열거 함수의 반환을 올바르게 작성하는 방법은 무엇입니까?

루슬란 22.11.17 12:29

그리고 열거형인 함수에서 인수 중 하나를 선언하는 방법은 다음과 같습니다.


void PCD_WriteRegister(PCD_Register 등록, 바이트 값);

PCD_Register가 나열된 위치:


열거형 PCD_Register: 바이트(
// 0페이지: 명령 및 상태
// 0x00 // 향후 사용을 위해 예약됨
CommandReg = 0x01<< 1, // starts and stops command execution
ComIEnReg = 0x02<< 1, // enable and disable interrupt request control bits
DivIEnReg = 0x03<< 1, // enable and disable interrupt request control bits
ComIrqReg = 0x04<< 1, // interrupt request bits
...
};

그리고 제가 이해한 대로 reg는 열거형이지만 코드 어디에도 선언되어 있지 않으며 어디서 왔는지 이해가 되지 않습니다!
나는 인터넷에서 많은 페이지를 읽었고 이러한 열거형이 정의로 대체될 수 있다는 정보를 찾았지만 여전히 그것들을 사용하여 작업하는 방법을 알고 싶었습니다!!!

루슬란 22.11.17 12:35

나는 당신의 대답을 기대하고 있습니다!
어쩌면 그들과 함께 작업하는 방법에 대한 비디오를 만들어 다른 사람들에게도 도움이 될 수 있도록 할 수도 있습니다. 그런 비디오가 없기 때문에 비디오가 매우 유용할 것이라고 생각합니다(적어도 저는 찾지 못했습니다)!

드미트리 28.11.17 22:02

"간단한 프로그래밍"

컨트롤러 프로그래밍을 위한 흥미로운 기관입니다. 일반적으로 32비트와 8비트를 어떻게 비교할 수 있는지는 명확하지 않습니다. Zarporozhets의 포르쉐 카이엔처럼.

알렉세이 11/29/17 10:24

비교할 수 있습니다. 이 비교에서 Porsche가 Zaporozhets보다 저렴하다는 점만 고려하면 됩니다. 비뇨기과에 관해서는 좀 더 특이합니다. 그래서 고치지 않겠습니다.

콘스탄틴 12/23/17 00:06

루슬란, 어떻게 검색하고 아무것도 찾지 못하는지 이해가 안 돼요(분명히 보고 있지 않은 것 같군요). 이것은 C 언어의 기본입니다(MK뿐만 아니라 컴퓨터에서도 마찬가지입니다). Kernighan과 Ritchie가 쓴 책을 읽어보세요. 거기에는 C의 모든 내용이 완벽하게 설명되어 있습니다.
그리고 아무도 귀하의 질문에 대답하지 않을 것입니다. 이것은 초보적인 것입니다.

어노니머스 11.02.18 16:27

32비트 ST MK와 8비트 Atmel을 비교하는 이유는 무엇입니까? 어리석은 비교. Atmel에 훨씬 더 강력한 방전기가 32개 있다는 점을 고려하더라도 32비트 Atmel AT91SAM을 8비트 STM8과 비교하는 것과 같습니다.

알렉세이 02/13/18 12:18

왜냐하면 이 글을 쓰는 시점에는 8밴드 ST가 판매되지 않았고 Mega와 STM32의 가격이 동일했기 때문입니다.

STM32_Dev 06/19/19 13:59

음, AVR은 동일한 작업을 수행하는 데 4-5 클록 사이클이 필요합니다!!! 단지. 그리고 여기서도 AVR은 부풀려진 클럭을 통해 STM32보다 더 좋게 만들어졌으며 STM32에는 AVR처럼 내부에 EEPROM이 없다는 것이 밝혀졌습니다.

16MHz의 AVR 클럭 - 1/16000000 = 0.0000000625s = 62.5ns * 5 클럭 = 312.5ns.
48MHz의 ARM 클록 - 1/48000000 = 0.0000000208s = 20.8ns * 12 클록 = 250ns.

박물관 atmega에서는 STM32의 12클럭 주기보다 5클럭 주기를 더 길게 계산하는 것 같습니다.)))

STM32에는 eprom이 없나요? 확신하는? STM32L152 - 8kB eprom! 아트메가는 어떻습니까? 512바이트? 아 정말 많아요!!! 나는 거기에 무엇을 써야할지조차 모릅니다. 생각해 봅시다... 음... 각각 4바이트의 16개 변수)) 음, 컨트롤러 사이의 폭풍우일 뿐입니다))

SIM31 06/30/19 19:29

소비 측면에서도 비교해 보면 신형 아트메가와 애티니가 매우 경제적이다.
그리고 모든 것에는 그 용도가 있습니다. 전원이 필요하다면 Raspbery Pi 4를 선택하고 걱정하지 마세요. Python에는 더 많은 가능성이 있습니다. 심지어 완전한 웹 서버를 설정하고 Quake 3D를 실행할 수도 있습니다.
데이터 스트림을 처리해야 하는 경우 pls가 있습니다("Mars Rover" "Mars Rover 2" 프로젝트 참조).
저자는 수많은 긍정적인 점을 가지고 있지만 Arduina가 모든 생명체보다 더 살아 있다는 사실은 모든 것이 그렇게 단순하지는 않다는 것을 의미합니다.


수년 동안 무선 아마추어들은 PIC 및 AVR 제품군의 8비트 마이크로컨트롤러를 사용해 왔습니다. 저렴한 가격, 상세한 문서, 프로그래밍 용이성 및 설치 용이성으로 인해 인기가 높습니다. 그러나 이러한 마이크로 컨트롤러의 성능이 작업을 해결하기에 충분하지 않은 경우가 종종 있습니다. 가장 간단한 예는 마이크로컨트롤러의 주파수 측정기 또는 신호 발생기입니다. 여기서 측정되거나 생성된 최대 주파수는 정보 처리 또는 출력 속도에 직접적으로 영향을 받습니다.

속도 외에도 8비트 마이크로 컨트롤러에는 다른 제한 사항이 있습니다. 예를 들어 많은 AVR 모델에는 하드웨어 직렬 포트가 하나만 있어 외부 장치에서 정보를 수신하는 동시에 처리 결과를 소비자에게 보낼 수 없습니다. 속도와 메모리 모두에 대한 많은 리소스가 필요한 그래픽 표시기에 정보를 표시하는 것과 같은 "진부한" 작업은 말할 것도 없습니다. 이러한 여러 가지 제한 사항을 분석한 후 저자는 STM32 제품군의 마이크로 컨트롤러로 전환하는 아이디어를 생각해 냈습니다.

예를 들어, 동일한 가격대의 두 마이크로컨트롤러(STM32F103C6 및 ATmega328P)를 생각해 보세요.

1 번 테이블

마이크로컨트롤러 유형

프로세서 크기

리드 피치, mm

클록 주파수, MHz

플래시 메모리 볼륨. KB

RAM 용량, KB

USART 번호

16비트 타이머 수

I/O 라인 수

대략적인 가격, 문지름.

이들의 비교 매개변수는 표에 나와 있습니다. 1. 비교 결과는 다소 놀랍습니다. 32비트 마이크로컨트롤러는 거의 모든 측면에서 8비트 마이크로컨트롤러보다 강력할 뿐만 아니라 가격도 저렴합니다. 물론 핀 피치가 0.5mm인 마이크로 컨트롤러를 집에서 납땜하는 것은 그리 쉬운 일이 아닙니다. 다행스럽게도 대부분의 경우 이는 필수가 아닙니다. 다양한 애플리케이션에 충분한 STM32 제품군 마이크로컨트롤러가 탑재된 다양한 유형의 개발 보드가 시장에 나와 있습니다. 좀 더 자세히 살펴보겠습니다.

STM32F4-디스커버리

이 보드(그림 1 참조)는 아마도 STM 마이크로컨트롤러를 공부하는 초보자에게 가장 편리할 것입니다. 첫째, 다양한 주변 장치 세트가 있습니다. 보드에는 마이크로컨트롤러 외에도 마이크로 전자기계 가속도계, 마이크, 오디오 DAC, USB 커넥터 2개, 버튼 1개, LED 4개가 포함되어 있습니다.

마이크로 컨트롤러 핀은 보드의 왼쪽 및 오른쪽 가장자리에 핀 커넥터를 장착하기 위해 접촉 패드 위로 나오므로 필요한 모든 외부 장치를 쉽게 연결할 수 있습니다. 보드에 설치된 STM32F407VGT6 마이크로 컨트롤러는 1MB의 FLASH 메모리, 192KB의 RAM 및 168MHz의 클록 주파수와 같은 매우 우수한 매개 변수를 가지고 있습니다.

마지막으로 보드에는 내장형 ST-LINK/V2 디버거가 장착되어 있어 보드의 마이크로 컨트롤러뿐만 아니라 다른 보드에 있는 동일한 제품군의 마이크로 컨트롤러에서도 프로그램을 디버깅하는 데 사용할 수 있습니다. 탈착식 점퍼와 SWD 커넥터를 사용하여 전환합니다.

보드 가격은 약 800 루블이며 이는 상당히 수용 가능한 것으로 간주 될 수 있습니다.

STM32F103RBT6 개발 보드

다음으로 흥미로운 옵션은 STM32F103RBT6 마이크로컨트롤러가 포함된 개발 보드입니다(그림 2).

클록 주파수 72MHz, FLASH 메모리 128KB, RAM 20KB 등 이전 보드에 설치된 것보다 다소 약하지만 주변 장치는 매우 흥미롭습니다. 320x240 픽셀 해상도와 대각선 2.8"의 TFT 터치 스크린, 컴퓨터와 정보 교환을 위한 내장 USB 포트, SD 메모리 카드용 슬롯, 32768Hz 쿼츠 시계, 프로그램 디버깅을 위한 실시간 시계 배터리 및 ST-LINK 커넥터.

이 보드의 가격도 약 800 루블이지만 디버거가 내장되어 있지 않습니다. 프로그램을 다운로드하려면 별도의 ST-LINK 디버거를 구입하거나 위에서 설명한 STM32F4-DISCOVERY 보드를 대신 사용해야 합니다.

메이플 미니

이 보드(그림 3)와 잘 알려진 Arduino 모듈의 외부 유사성은 놀랍습니다. 그리고 이것은 우연이 아닙니다.

Maple Mini 보드는 Arduino Nano를 대체하도록 설계되었습니다. Arduino에 설치된 AVR 마이크로컨트롤러 제품군의 프로그래밍 언어 및 개발 환경이 STM 제품군에 맞게 조정되었습니다. Maple IDE 프로그래밍 언어 및 개발 환경에 대한 자세한 내용을 보려면 http://leaflabs.com/docs/maple-q uickstart.html을 방문하세요.

개발 보드에는 72MHz, 128KB의 FLASH 메모리 및 20KB의 RAM에서 실행되는 STM32F103CBT6 마이크로컨트롤러가 있는데, 이는 의심의 여지 없이 어떤 Arduino 모듈보다 더 많습니다. 그리고 개발 환경이 거의 변하지 않았다는 점은 더욱 큰 장점입니다.

이와 별도로, Maple Mini는 작은 크기에도 불구하고 34개의 I/O 라인, 2개의 SPI 및 2개의 I2C 인터페이스 채널, 3개의 직렬 포트 등 매우 다양한 주변 장치를 제공합니다. 이를 통해 다양한 아마추어 개발에 성공적으로 사용될 수 있습니다. Maple Mini는 크기가 작기 때문에 개발 중인 장치에 직접 내장할 수 있습니다.

원래 Maple Mini 보드는 개발자 웹사이트에서 35달러에 구입할 수 있습니다. 배송비는 5달러가 추가됩니다. 중국산 보드 사본의 가격은 절반 정도입니다.

소프트웨어

STM32 제품군의 마이크로컨트롤러용 프로그램을 준비하는 데 사용할 수 있는 개발 환경에는 여러 가지 옵션이 있습니다.

상업용 IAR Embedded Workbench, AtollicTrueSTUDIO, Keil 등 이러한 모든 기능을 갖춘 제품은 라이선스 가격이 1000유로부터 시작하여 상당히 비싸지만, 개발되는 프로그램의 양에 제한이 있는 무료 데모 버전도 있습니다. 간단한 프로젝트로 충분합니다.

ARM-GCC 컴파일러가 포함된 무료 Eclipse를 사용하려면 사용하기 전에 컴파일러에 대한 중요한 구성이 필요합니다. 오늘날의 유일한 장점은 Windows뿐만 아니라 Linux에서도 작업할 수 있다는 것입니다.

동일한 Eclipse 편집기를 기반으로 하는 무료 CooCox IDE(CoIDE)입니다. ST-LINK를 통해 프로그램을 로드하고 디버그합니다. CoIDE는 이전 옵션과 달리 특별한 설정이 필요하지 않으며 설치 후 즉시 작동합니다. 이 옵션은 가장 편리하며 사용할 가치가 있습니다.

CooCox IDE를 사용하여 모든 마이크로 컨트롤러에 대한 첫 번째 프로그램의 기본 LED 깜박임을 구현하는 STM32F4-DISCOVERY 보드용 예제 프로그램을 만들어 보겠습니다. STM32F4-DIS-COVERY 보드에는 4개의 LED가 있으며, 이는 마이크로컨트롤러의 핀 PD12-PD15에 연결됩니다. 교대로 깜박이도록 합시다.

Step 1. CoIDE 개발 환경을 실행하고 프로젝트를 생성합니다. 그림에 표시된 드롭다운 목록에서 4, STM32F407VG 마이크로컨트롤러를 선택합니다.

2단계. 그림과 같습니다. 5, 프로젝트에 사용될 구성요소를 선택합니다. 주요 기능으로는 GPIO(입출력), C Library(C 언어의 기본 기능), M4 Core(프로세서 코어 기능) 등이 있습니다. 컴포넌트를 활성화하면 CoIDE가 자동으로 필요한 파일을 프로젝트 폴더에 복사해 주기 때문에 매우 편리합니다.

3단계. 프로그램 텍스트 입력. 매우 짧으며 표에 나와 있습니다. 2.

보시다시피 모든 것이 간단하고 분명합니다. AVR 마이크로 컨트롤러용 프로그램을 작성한 사람들은 아마도 방향(입력 또는 출력)을 나타내는 포트 초기화, 필요한 작업이 수행되는 메인 루프 등 친숙한 디자인을 보게 될 것입니다. 일반적으로 프로그램의 구문은 C 언어와 완전히 일치하며 이에 대한 문헌이 충분합니다. 인터넷에는 STM32 프로그래밍에 관한 많은 기사도 있습니다. 많은 예제가 개발 보드와 함께 제공되며 샘플로도 사용할 수 있습니다.

"플래시로 다운로드" 화면 버튼을 클릭하여 프로그램 텍스트를 입력하면 마이크로컨트롤러로 다운로드됩니다. 보드의 LED가 깜박이기 시작합니다. 이와 별도로 디버깅 기능에 주목할 가치가 있습니다. 프로그램의 어느 곳에서나 중단점을 설정할 수 있으며 프로그램을 단계별로 실행하여 변수 값을 볼 수 있습니다.

물론 이 예는 이상적이지 않습니다. 예를 들어, 타이머 인터럽트를 사용하여 LED 깜박임을 제어하면 다른 작업을 위해 기본 프로그램 루프를 확보할 수 있습니다. 원하는 사람은 스스로 알아낼 수 있습니다.

결론

일반적으로 STM32 제품군의 마이크로 컨트롤러는 처음 알게 된 후 매우 즐거운 인상을 남겼습니다. 모든 것이 그다지 복잡하지 않은 것으로 판명되었으며 개발 환경의 편리함, 디버깅 프로세스 및 많은 표준 기능은 Ms DOS에서 Windows로의 전환을 다소 상기시켜주었습니다. 일반적인 요점은 동일한 것 같지만 모든 것이 훨씬 더 편리하고 기능적입니다.

그러나 아마추어 개발에 있어 이 제품군의 가장 큰 단점은 여전히 ​​핀 피치가 너무 작다는 것입니다. 집에서 핀 피치가 0.5mm인 보드를 설계하고 납땜하는 것은 매우 간단한 작업입니다. 그러나 현재 가격으로 이미 마이크로 컨트롤러가 장착된 디버깅 보드는 모든 무선 아마추어가 쉽게 접근할 수 있습니다.

모든 것을 STM 및 32비트 아키텍처로 변환할 가치가 있습니까? 당연히 아니지. ATtiny로 충분한 작업이 있습니다. 그러나 예를 들어 집에서 만든 SDR 수신기의 스펙트럼을 분석하거나 네트워크를 통해 많은 양의 정보를 수신 및 전송하려면 강력한 마이크로 컨트롤러를 즉시 사용하여 다음과 같은 경우 메모리나 성능이 부족하지 않도록 하는 것이 훨씬 더 효과적입니다. 장치를 개선합니다.

Cortex 코어를 기반으로 마이크로 컨트롤러 장치의 전문 개발자와 초보 개발자 모두 사이에서 적극적으로 인기를 얻기 시작했습니다. 여기에는 몇 가지 이유가 있습니다.
- 경쟁사에 비해 가격이 저렴함.
- 다수의 내장 인터페이스;
- 프로그래밍이 쉽고 신뢰성이 높습니다.
그러나 한 가지 중요한 단점도 있습니다. 모든 STM 마이크로 컨트롤러는 DIP 패키지로 생산되지 않습니다. 이는 집에서 0.3mm 미만의 트랙이 있는 보드를 만드는 것이 문제가 되기 때문에 종종 초보자를 겁나게 합니다. 이러한 상황으로 인해 ST Microelectronics(Discovery)의 디버그 보드와 타사(Olimex, Pinboard)가 생산한 보드 모두 수많은 디버그 보드가 시장에 등장하게 되었습니다. 제가 Discovery를 선택한 이유는 세 가지입니다.
- 상대적으로 저렴한 가격 (보드는 300 루블에서 구입할 수 있음)
- 좋은 솜씨 (배선에 대한 불만이 있지만 그다지 중요하지 않음)
- 제조업체의 웹사이트에 많은 소스와 예제가 게시되어 있습니다.
- 프로그래머가 내장되어 있습니다(별도로 구매할 필요가 없습니다).
첫 번째 강의의 목적은 초보 개발자가 디버깅 보드를 선택하도록 돕고 앞으로는 프로그래밍의 기본 사항을 가르치는 것입니다.
자, 가자.

STM32F0디스커버리

이 보드는 이전에 8비트 마이크로컨트롤러를 사용했던 개발자를 유치하여 이러한 틈새 시장을 채우기 위해 2012년 2월에 출시되었습니다. 나는 그녀에 대해 나쁘거나 좋다고 말할 수 없습니다. 저렴한 일반 보드는 시작하기에 좋습니다. 다음과 같은 특징이 있습니다.
- 마이크로컨트롤러: STM32F051R8T6(Cortex M0, 48MHz, 플래시 64KB, RAM 8KB)
- 보드와 별도로 사용할 수 있는 내장 ST-link/V2
- USB 또는 외부 3/5V 소스에서 전원이 공급됩니다.
- 4개의 LED와 2개의 버튼;
- 인터페이스: USART, SPI, I2C, HDMI;
- 타이머 16 및 32비트;
- 모든 출력은 두 개의 단일 행 콤으로 라우팅됩니다.
실제로 이러한 보드는 이미 상당히 구식이므로 훈련 초기에만 사용하는 것이 좋습니다.

STM32VLDISCOVERY

STM32F100RBT6B 프로세서(Cortex M3, 24MHz, 플래시 128KB, RAM 8KB) 및 주변 장치 빗의 레이아웃에서만 이전 보드와 다릅니다. 위에서 설명한 것과 마찬가지로 초보 개발자에게 적합합니다. 그녀에 대해 더 이상 할 말이 없습니다.

STM32LDISCOVERY

STM32LDISCOVERY는 이전 보드의 가치 있는 발전입니다. 흥미로운 점은 다음과 같습니다.
- 마이크로컨트롤러 STM32L152RBT6(Cortex M3, 32MHz, 플래시 128Kb, RAM 8Kb, EEPROM 4Kb)
- 인터페이스: USB, USART, SPI, I2C;
- 타이머 8개
- 24채널 12비트 ADC;
-12비트 DAC;
- 실시간 시계;
- LCD 컨트롤러 8x40
- 내장 ST-link/V2.
보드에는 다음이 설치되어 있습니다.
- LCD 디스플레이 24x8;
- LED 4개
- 버튼 2개;
- 터치 키보드;
- 리드가 없는 1열 빗 2개.
USB에 대해 별도로 말씀드리고 싶습니다. 컨트롤러는 이 클래스의 MK에서는 거의 볼 수 없는 USB 2.0 최고 속도, 호스트 및 장치 모드를 지원합니다.
실제로 보드는 Cortex-M3 코어 작업에 가장 적합한 옵션이므로 가격이 저렴하므로 안전하게 사용할 수 있습니다.

STM32F3디스커버리

STM32F3DISCOVERY는 STM의 차세대 개발 보드에 속하며 다음과 같은 특징을 가지고 있습니다.
- 마이크로컨트롤러 STM32F303VCT6(Cortex M4, 72MHz, 플래시 256KB, RAM 48KB)
- 실시간 시계;
- 내장 ST-link/V2;
- 타이머 13개
- 12채널 DMA 컨트롤러;
- ADC 4개
- 4개의 연산 증폭기;
- 인터페이스: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87개의 GPIO 라인.

- 맞춤형 USB 포트;
- 하나의 하우징에 3축 가속도계와 3축 지자기 센서가 들어있습니다.
- 3축 자이로스코프;
- LED 10개
- 버튼 2개;
- 2열 빗 2개.
매우 흥미로운 보드이며 실험할 수 있는 기회가 많습니다. 일반적으로 이에 대한 의견은 여전히 ​​좋지만, 확장 보드를 직접 쉽게 만들 수 있지만 물리적 상태와 위치를 추적하는 데 초점을 맞추면 실험 범위가 크게 줄어듭니다.

STM32F4디스커버리

저는 이 보드로 작업할 기회가 가장 많았고 다른 보드보다 더 마음에 들었습니다. 포괄적인 초점이 영향을 미쳤습니다.
내용은 다음과 같습니다.
- 마이크로 컨트롤러 STM32F407VGT6 (Cortex M4, 168MHz, 플래시 1MB, RAM 192KB)
- 내장 ST-link/V2;
- 타이머;
- DMA 컨트롤러;
- ADC/DAC;
- 인터페이스: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
보드에는 다음 주변 장치가 포함되어 있습니다.
- 맞춤형 USB 포트;
- 3축 가속도계;
- LED 8개
- 버튼 2개;
- 2열 빗살 2개
- 클래스 D 증폭기를 갖춘 오디오 DAC
- 무지향성 디지털 마이크.

위에서 쓴 것처럼 이 보드가 제게는 주요 보드가 되었고, 소리와 가속도계 작업 기능이 마음에 들었습니다.

이 보드를 기반으로 추가 수업이 진행됩니다.

요약.
STM 디버깅 보드 작업을 시작하기로 결정했다면 STM32F4DISCOVERY를 사용하는 것이 좋습니다. 제 생각에는 STM32F4DISCOVERY가 가장 뛰어난 기능을 가지고 있다고 생각합니다. 추가 기사는 특히 작업을 기반으로 할 것입니다. 가까운 시일 내에 다음 주제에 관한 기사가 작성될 예정입니다.
- GPIO, 타이머, 인터럽트 등을 사용하여 작업합니다.
- 디스플레이, GPS 및 GSM 모듈, 온도 센서, RS-232를 통한 컴퓨터와의 통신 등 실제 장치의 예를 사용하여 UART, SPI, I2C 및 1선 인터페이스로 작업합니다.
이 주기의 최종 목표는 STM32F4용 확장 보드를 만드는 것입니다. 모든 펌웨어 및 회로도는 공개적으로 제공됩니다.