C로 stm32 프로그래밍하기 팔

ARM 컨트롤러 마스터링의 또 다른 "빠른 시작"인 이 기사는 Cortex-M3 코어(STM32F1xxx 시리즈) 기반의 32비트 ARM 컨트롤러 마스터링의 첫 번째 단계를 수행하는 데 도움이 될 것입니다. 아마도 이 기사(비가 온 후의 버섯처럼 이 주제에 관한 기사)가 누군가에게 유용할 것입니다.

소개

왜 ARM인가?
1. 선택할 수 있는 것이 많습니다( 다른 제조업체에 의해현재 240개 이상의 ARM 컨트롤러가 생산됩니다.)
2. 저렴한 가격(예를 들어 $1의 경우 37xI/O, 16K 플래시, 4K RAM, 2xUART, 10x12bitADC, 6x16bitPWM을 얻을 수 있습니다).

ST Microelectronics의 컨트롤러로 작업을 시작해 보겠습니다. ARM Cortex-M3 코어 기반 컨트롤러는 다양한 주변 장치, 높은 수준의 성능 특성 및 저렴한 가격이 특징입니다.
추신 처음에는 ARM이 일종의 끔찍한 생물인 것 같습니다(납땜, 배선, 프로그래밍 측면에서). 그러나 이는 언뜻 보기에 불과합니다. :) 직접 확인하게 될 것입니다.

그래서 우리는 STM32F1 컨트롤러의 예를 사용하여 ARM에 대해 연구하겠습니다. 동시에 이 시리즈에는 여러 줄이 있습니다.

  • 밸류 라인 STM32F100 - 24MHz CPU, 모터 제어, CEC.
  • 액세스 라인 STM32F101 - 36MHz CPU, 최대 1MB 플래시
  • USB 액세스 라인 STM32F102 - USB FS가 포함된 48MHz CPU
  • 고성능 라인 STM32F103 - 72MHz, 최대 1MB 플래시, 모터 제어, USB, CAN
  • 연결 라인 STM32F105/107 - 72MHz CPU, 이더넷 MAC, CAN, USB 2.0 OTG

다음과 같은 분류도 있습니다.

STM32 컨트롤러는 3개의 메모리 영역에서 강제로 부팅될 수 있습니다(컨트롤러가 시작될 때 또는 재설정된 후 BOOT0 및 BOOT1 핀의 상태에 따라 다름). 다음과 같은 방법으로 컨트롤러 메모리에 프로그램을 쓸 수 있습니다.

편도:
부트로더 사용(이미 시스템 메모리에 기록됨) 및 USART1(USART2 재매핑): 내부 8MHz 클럭 신호를 사용합니다. 제조업체가 컨트롤러에 직접 배선한 내장 부트로더를 실행하려면 RS232-3.3V 변환기(예: FT232RL 기반)의 신호를 컨트롤러 TX1, RX1 및 해당 세트 이전의 발에 전달하기만 하면 됩니다. BOOT0 = 1 및 BOOT1 = 0, RESET을 누르면 컨트롤러에서 프로그램을 재봉할 수 있습니다. 그리고 그것은 꿰매어져 있습니다. 플래시 프로그램 STM의 로더 Demonstartor(Windows용).

추신. LINUX를 실행 중이고 검색 유형 디버깅 보드가 없는 경우 모두가 선호하는 rs-232(실제로는 rs-232-3.3V 변환기를 통해)를 통해 컨트롤러에 펌웨어를 업로드할 수 있습니다. 이렇게 하려면 Python 스크립트(Ivan A-R)(LINUX 또는 MACOSX용)를 사용해야 합니다.
시작하려면 Python 2.6이 설치되어 있어야 하고 작업을 위한 라이브러리가 있어야 합니다. 직렬 포트- PySerial 라이브러리.
이제 (물론 터미널에서) stmloader.py 스크립트를 실행하려면 컴퓨터에 맞게 약간 조정해야 합니다. 즉, 텍스트 편집기에서 엽니다.
모집 장소 명령줄
~$ dmesg | grep tty
모든 것을 보려면 직렬 포트 PC.
그리고 입력 후...
~$ seterial -g /dev/ttyS
우리는 232번째 항구로 가는 길을 알아냈습니다. 시스템이 seterial에 대해 불만을 표시하는 경우 이를 설치하십시오.
~$ sudo apt-get install setserial
물리적 포트의 경로를 알아냅니다(예를 들어 내 포트는 /dev/ttyS0입니다). 이제 기본 "/dev/tty.usbserial-..." 대신 stm32loader.py 스크립트 파일에 이 경로를 작성해야 합니다. 터미널에 입력하세요
~$ 파이썬 stm32loader.py -h
...도움을 요청하고 컨트롤러에 펌웨어를 업로드합니다.

방법 2:
USB를 통해 DFU 모드를 사용하는 OTG에는 8MHz, 14.7456MHz 또는 25MHz의 외부 석영이 필요합니다(USB OTG가 있는 모든 컨트롤러에 이 부트로더가 있는 것은 아닙니다. 컨트롤러 표시를 주의 깊게 살펴봐야 합니다).

3가지 방법:
JTAG/SWD. Discovery 유형의 데모 보드나 집에서 만든 JTAG/SWD 프로그래머가 있는 경우 코드를 업로드하고 이미 이러한 방식으로 마이크로 컨트롤러를 디버깅할 수 있습니다. JTAG의 경우 마이크로 컨트롤러에는 6개의 다리(TRST, TDI, TMS, TCK, TDO, RST) + 전원용 2개가 있습니다. SWD는 4개의 신호(SWDIO, SWCLK SWO, RESET)를 사용하고 2개의 신호를 전원으로 사용합니다.

추신. EAGLE 환경에서 48, 64 및 100-leg 컨트롤러(eagle 폴더)에 대한 여러 개의 빈 회로를 스케치했으며 stm32loader에는 stm32loader.py 스크립트가 포함되어 있습니다.

지침이 있는 모든 것에 익숙해지기 시작하는 것이 가장 좋습니다. 어떤 경우에는 모든 것이 명확하고 다른 경우에는 "흠, 아무것도 작동하지 않습니다. 여전히 지침을 읽어야하는 것 같습니다." 마이크로컨트롤러는 매우 복잡한 장치이므로 문서를 읽지 않고서는 마이크로컨트롤러를 사용하여 유용한 작업을 수행할 수 없습니다.

일부 AVR을 사용한 후에는 STM32 마이크로컨트롤러에 대한 다양한 PDF 수에 약간의 충격을 받을 수 있습니다. 어디를 먼저 살펴볼까요? 사용 방법? 이제 무슨 일이야?? 언뜻 보면 아무것도 명확하지 않습니다. 따라서 저는 이 멋진 마이크로컨트롤러에 대한 문서의 세계에 대해 간략하게 살펴보기로 결정했습니다. 나는 이 특정 돌을 사용하는 방법에 대한 여러 강의를 작성할 계획이므로 STM32F103C8T6에 특히 중점을 둘 것입니다.

STM의 주요 문서는 다음과 같습니다.

  1. 데이터 시트
  2. 참조 매뉴얼
  3. 프로그래밍 매뉴얼
  4. 정오표 시트

데이터 시트

데이터 시트에는 특정 MK의 특정 주변 장치 존재, 핀아웃, 전기적 특성 및 STM32F103x8 및 STM32F103xB 칩 표시에 대한 정보가 포함되어 있으며 빨간색 직사각형으로 원으로 표시되어 있습니다.

간단히 말해서 8개의 마이크로컨트롤러에 대한 하나의 데이터시트입니다.

데이터시트의 기본 사항

우선, 섹션에 주목해야합니다 7.주문 정보 체계, 표시되는 경우 표시의 각 문자를 나타냅니다. 예를 들어 STM32F103C8T6의 경우: LQFP-48 패키지, 64Kb 플래시, 온도 범위 –40 ~ 85°C.

다른 열의 마이크로 컨트롤러 간의 주요 차이점은 다리 수와 플래시 볼륨이며 다른 모든 것은 동일합니다. 작은 예외는 첫 번째 버전 열입니다. 송신: 이 마이크로 컨트롤러에는 SPI, I2C 및 USART 모듈 수가 더 적습니다. 주변 장치 번호 지정은 1부터 시작합니다. 즉, STM32F103의 경우 CX 2개의 SPI가 있고 SPI1과 SPI2라는 이름이 있고 STM32F103에 있습니다. 송신 SPI1만 있습니다. STM32F103x8 및 STM32F103xB 마이크로컨트롤러에 대한 데이터시트가 있으므로 이 표는 해당 모델에만 유효합니다. 예를 들어 STM32F103 C8또는 STM32F103 C.B.이 표에 해당하며 STM32F103 C6아니요, 별도의 데이터시트가 있습니다.

장에서 2.2 제품군 전체에 걸친 완벽한 호환성 STM32F103xx 장치는 소프트웨어, 기능 및 핀-투-핀(동일한 경우)과 호환된다고 합니다.

참조 매뉴얼에는 다음과 같은 마이크로 컨트롤러 "유형"으로 구분되어 있습니다. STM32F103x4 및 STM32F103x6은 다음과 같이 지정됩니다. 저밀도 장치 , STM32F103x8 및 STM32F103xB 중간 밀도 장치 , STM32F103xC, STM32F103xD 및 STM32F103xE 고밀도 장치 . 저밀도 장치에는 플래시 및 RAM 메모리, 타이머 및 주변 장치가 적습니다. 고밀도 장치에는 더 많은 플래시 및 RAM 메모리가 있고 SDIO, FSMC, I2S 및 DAC와 같은 추가 주변 장치도 있으면서 STM32F103xx 제품군의 다른 제품과 완벽하게 호환됩니다. 즉, 개발의 어떤 단계에서 선택한 마이크로 컨트롤러가 모든 기능을 구현하기에 충분하지 않다는 것이 분명해지면 기존 소프트웨어를 모두 다시 작성할 필요 없이 보다 정교한 스톤을 안전하게 선택할 수 있으며, 새 스톤이 동일한 경우에는 인쇄 회로 기판을 다시 배선할 필요가 없습니다.

참조 매뉴얼

계속 진행합시다. 참조 설명서에는 다음이 포함되어 있습니다. 상세 설명모든 주변 장치, 레지스터, 오프셋 등. 마이크로 컨트롤러용 펌웨어를 만들 때 사용되는 주요 문서입니다. 참조 매뉴얼은 대규모 마이크로컨트롤러 그룹용으로 작성되었습니다. 이 경우에는 모든 STM32F10xxx, 즉 STM32F101xx, STM32F102xx, STM32F103xx 및 STM32F105xx/STM32F107xx에 대해 작성되었습니다. 하지만 STM32F100xx는 이 RM에 포함되어 있지 않으며 이를 위한 것이 있습니다.

참조 매뉴얼의 주요 내용

위에서 언급했듯이 참조 매뉴얼에는 저밀도, 중간 밀도, 고밀도 및 연결성이라는 마이크로 컨트롤러 "유형"으로 구분되어 있습니다.
선. 안에 2.3 용어집누가 누구인지 설명했습니다.

  • 저밀도 장치이는 플래시 메모리 크기가 16~32KB인 STM32F101xx, STM32F102xx 및 STM32F103xx 마이크로컨트롤러입니다.
  • 중간 밀도 장치이는 STM32F101xx, STM32F102xx 및 STM32F103xx이며 플래시 메모리 크기는 64KB에서 128KB 사이입니다.
  • 고밀도 장치이는 STM32F101xx 및 STM32F103xx이며 플래시 메모리 크기는 256KB에서 512KB 사이입니다.
  • XL 밀도 장치이는 STM32F101xx 및 STM32F103xx이며 플래시 메모리 크기는 768KB에서 1MB 사이입니다.
  • 연결 라인 장치이들은 마이크로 컨트롤러 STM32F105xx 및 STM32F107xx입니다.

우리의 STM32F103C8T6은 중간 밀도 장치입니다. 이는 주변 장치를 연구할 때 알아두면 유용합니다. 예를 들어 저밀도, 중간 밀도, 고밀도 및 XL 밀도 장치와 연결 라인 장치에 대한 RCC에 대한 별도의 섹션이 있습니다.

프로그래밍 매뉴얼

프로그래밍 매뉴얼은 STM을 처음 접할 때 필수적인 문서는 아니지만, 이러한 마이크로컨트롤러를 깊이 있게 연구할 때는 매우 중요합니다. 여기에는 프로세서 코어, 명령어 세트 및 코어 주변 장치에 대한 정보가 포함되어 있습니다. 또한 이는 참조 설명서에 설명된 것과 동일한 주변 장치가 아닙니다. 여기에는 다음이 포함됩니다.

  • 시스템 타이머 - 시스템 타이머
  • 중첩된 벡터 인터럽트 컨트롤러 - 우선순위 인터럽트 컨트롤러
  • 시스템 제어 블록
  • 메모리 보호 장치

STM32의 인터럽트에 익숙해지기 시작하면 다음 섹션이 필요합니다. 4.3 중첩된 벡터 인터럽트 컨트롤러(NVIC). 음, 시스템 타이머는 일부 RTOS에서나 소프트웨어 타이머를 생성하는 데 유용할 매우 멋진 것입니다.

정오표 시트

정오표 시트는 알려진 모든 하드웨어 결함과 마이크로 컨트롤러의 잼 및 이를 해결하는 방법에 대한 정보 모음입니다. 꽤 재미있는 문서입니다 🙂 주변 장치를 사용하기 전에 한 번 살펴보는 것이 좋습니다. 이는 작동을 원하지 않는 기적의 펌웨어를 디버깅할 때 손실된 신경 세포의 수를 줄이는 데 도움이 될 수 있습니다. :)

최근 한 동료가 스마트 홈을 만들겠다는 아이디어에 푹 빠져서 수십 가지의 다양한 센서를 직접 주문하기도 했습니다. 선택에 대한 질문이 생겼습니다 마이크로컨트롤러(이하 MK) 또는 보드. 검색을 한 후 몇 가지 옵션을 찾았습니다. 그중에는 아두이노(그의 복제품도 포함되어 있는데, 그 중 하나는 단지 재미를 위해 주문한 것입니다) 그리고 발사대, 그러나 이 모든 것은 중복되고 번거롭습니다(프로그래밍 측면에서는 훨씬 간단하지만 홀리바르에 대한 주제를 제기하지는 않을 것이며 모든 사람은 자신의 취향을 가지고 있습니다). 결국 기성 보드를 결정하지 않고 MK만 가져가서 처음부터 모든 것을 하기로 결정했습니다. 결국 나는 둘 중 하나를 선택했다 아트멜 ATtiny (2313), 아트멜 ATmega(적절한 돈을 구할 수 없어서 거절하기로 결정), STM32(핵심의 피질 ). 나는 이미 10대와 장난을 쳤기 때문에 내가 직접 가져갔다. STM32VL-디스커버리. 이것은 일련의 기사에 대한 소개라고 할 수 있습니다. STM32. 즉시 예약하겠습니다. 저는 이 기사 대부분의 저자가 아닙니다. 왜냐하면... 나는 단지 그것을 직접 배우는 중입니다. 여기서는 주로 나 자신을 위해 게시하므로 잊어버린 것이 있을 때 검색하기가 더 쉽습니다. 그럼 가자!

일반 정보

마이크로컨트롤러가족들 STM32 PORTA에서 PORTG까지 이름을 가진 최대 7개의 16비트 I/O 포트를 포함합니다. 안에 특정 모델 마이크로컨트롤러예외 없이 모든 포트 핀을 사용할 수 있으며 총 개수는 하우징 유형에 따라 다르며 해당 하위 제품군의 데이터시트에 지정되어 있습니다.

포트 x를 활성화하려면 먼저 주변 장치 클럭 활성화 레지스터에서 해당 IOPxEN 비트를 설정하여 이를 APB2 버스에 연결해야 합니다. RCC_APB2ENR:

RCC->APB2ENR |= RCC_APB2ENR_IOPxEN; // PORTx 클로킹을 활성화합니다.

항만관리 STM32 7개의 32비트 레지스터 세트를 사용하여 수행됩니다.

  • GPIOx_CRL, GPIOx_CRH– 각 포트 비트의 작동 모드를 입력 또는 출력으로 설정하고 입력 및 출력 단계의 구성을 결정합니다.
  • GPIOx_IDR– 포트 x 핀의 물리적 상태를 읽기 위한 입력 데이터 레지스터입니다.
  • GPIOx_ODR– 출력 레지스터는 데이터를 포트에 직접 씁니다.
  • GPIOx_BSRR– 원자 재설정 및 포트 비트 설정 레지스터.
  • GPIOx_BSR– 포트 비트 재설정 레지스터.
  • GPIOx_LCKR– 핀 구성 잠금 레지스터.

GPIO 핀 작동 모드

개별 핀의 작동 모드는 비트 조합에 의해 결정됩니다. MODEy그리고 CNFy 레지스터 GPIOx_CRL그리고 GPIOx_CRH(이하: x는 포트 이름, y는 포트 비트 번호)

GPIOx_CRL- 핀 구성 레지스터 0...7 포트 엑스:

레지스터 구조 GPIOx_CRH유사한 구조 GPIOx_CRL포트의 상위 핀(비트 8~15)의 작동 모드를 제어하도록 설계되었습니다.

지정된 레지스터의 MODEy 비트는 출력 모드의 출력 방향과 전환 속도 제한을 결정합니다.

  • MODEy = 00:입력 모드(리셋 후 상태);
  • MODEy = 01:출력 모드 최대 속도– 10MHz;
  • MODEy = 10:출력 모드, 최대 속도 – 2MHz;
  • MODEy = 11:출력 모드, 최대 속도 – 50MHz.

CNF 비트는 해당 핀의 출력 단계 구성을 지정합니다.

로그인 모드에서:

  • CNFy = 00:아날로그 입력;
  • CNFy = 01:세 번째 상태(리셋 후 상태)의 입력;
  • CNFy = 10:풀업 저항기(PxODR=1인 경우) 또는 풀다운(PxODR=0인 경우)을 사용한 입력;
  • CNFy = 11:예약된.

종료 모드에서:

  • CNFy = 00:푸시풀 출력 범용;
  • CNFy = 01:범용 오픈 드레인 출력;
  • CNFy = 10:대체 기능을 갖춘 푸시-풀 출력;
  • CNFy = 11:대체 기능이 있는 오픈 드레인 출력.

잡음 내성을 높이기 위해 모든 입력 버퍼에는 슈미트 트리거가 포함되어 있습니다. 결론의 일부 STM32, 공통 버스 및 전원 버스에 연결된 보호 다이오드가 장착되어 있으며 데이터 시트에 FT(5V 허용)로 표시되어 있으며 5V 전압과 호환됩니다.

GPIO 구성 비트 보호

구성 레지스터의 비트를 무단 쓰기로부터 보호하려면 STM32설정 잠금 레지스터가 제공됩니다 GPIOx_LCKR
GPIOx_LCKR- 포트 출력 설정 잠금 레지스터:

개별 포트 핀의 설정을 보호하려면 해당 LCKy 비트를 설정해야 합니다. 그런 다음 해당 카테고리에서 순차적 녹음을 수행합니다. LCKK값 "1" - "0" - "1" 및 두 개의 레지스터 읽기 작업 LCKR, 성공적인 차단의 경우 비트에 대해 제공됩니다. LCKK값은 "0"과 "1"입니다. 설정 비트 보호는 다음에 마이크로컨트롤러를 재부팅할 때까지 계속 적용됩니다.

주변기기 정의 파일 마이크로컨트롤러 STM32 stm32f10x.h는 공통 기능 목적(포함)으로 통합된 별도의 레지스터 그룹을 정의합니다. GPIO)은 C 언어의 구조로, 레지스터 자체는 이 구조의 요소로 사용됩니다. 예를 들어:

GPIOC->BSRR– GPIOC 포트 설정/재설정 레지스터 BSRR.
마이크로컨트롤러 I/O 레지스터로 작업하는 방법을 설명하기 위해 stm32f10x.h 파일의 정의를 사용해 보겠습니다. STM32F100RB스타터 키트에 설치됨 STM32VLDISCOVERY:

#include "stm32F10x.h" u32 tmp; int main (void) ( RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // PORTC 클로킹을 활성화합니다. GPIOC->CRH |= GPIO_CRH_MODE8; // LED4 PC8을 출력합니다. GPIOC->CRH &=~GPIO_CRH_CNF8; // 푸시풀 GPIOC->CRH |= GPIO_CRH_MODE9; // 출력 LED3 PC9. GPIOC->CRH &=~GPIO_CRH_CNF9; // PC9의 푸시-풀 출력. GPIOC->LCKR = GPIO_LCKR_LCK8|GPIO_LCKR_LCKK; GPIOC->LCKR = GPIO_LCKR_LCK8|GPIO_LCKR_LCK9|GPIO_LCKR_LCKK;tmp=GPIOC->LCKR;

GPIO 쓰기 및 읽기

입력 포트는 쓰기 및 읽기용입니다. GPIOx_IDR그리고 쉬는 날 GPIOx_ODR데이터 레지스터.

출력 레지스터에 쓰기 ODR출력용으로 구성된 포트는 기록된 값에 따라 포트의 모든 비트의 출력 레벨을 설정합니다. 핀이 풀업 입력으로 구성된 경우 해당 레지스터 비트의 상태 ODR전원 버스(풀업, ODR=1) 또는 마이크로컨트롤러의 일반 버스(풀다운, ODR=0)로의 출력 풀업을 활성화합니다.

레지스터 읽기 IDR입력으로 구성된 마이크로컨트롤러 핀의 상태 값을 반환합니다.

// 버튼을 누르면(PA0=1) 포트 C 비트를 설정하고, 그렇지 않으면 재설정합니다. if (GPIOA->IDR & GPIO_IDR_IDR0) GPIOC->ODR=0xFFFF; 그렇지 않으면 GPIOC->ODR=0x0000;

포트 비트 재설정 및 설정

원자 재설정 및 비트 세트의 경우 GPIO마이크로컨트롤러에서 STM32등록이 예정되어 있습니다 GPIOx_BSRR. 건축의 전통 유형 연산의 사용이 필요하지 않은 레지스터 비트를 관리하는 방법 "읽기-수정-쓰기"설정된 비트에 간단히 쓰기만 하면 포트 비트를 설정하고 재설정할 수 있습니다. BS(비트세트) 그리고 재설정 BR(비트리셋) 등록하다 BSRR. 이 경우 레지스터에 0비트를 써도 해당 핀의 상태에는 영향을 미치지 않습니다.

GPIOx_BSRR– 포트 비트 재설정 및 설정을 위한 레지스터:

GPIOC->BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BR9; // LED4(PC8)를 켜고 LED3을 끕니다. GPIOC->BSRR=GPIO_BSRR_BS9|GPIO_BSRR_BR8; // LED3(PC9)을 켜고 LED4를 끕니다.

대체 기능 GPIO그리고 그들의 재배치 (재매핑)
거의 모든 외부 회로 특수 목적 STM32(수정 공진기를 연결하기 위한 리드 포함, JTAG/SWD등)은 마이크로 컨트롤러의 해당 핀에서 활성화하거나 비활성화하여 범용 핀으로 사용할 수 있습니다. 대체 출력 기능의 선택은 접두사가 있는 레지스터를 사용하여 수행됩니다. "아피오”_.
또한, 레지스터 AFIO _ 여러 레이아웃 옵션을 선택할 수 있습니다 특수 기능마이크로 컨트롤러 핀에. 이는 특히 통신 인터페이스, 타이머(레지스터)의 출력에 적용됩니다. AFIO_MAPR), 외부 인터럽트 핀(레지스터 AFIO_EXTICR) 등.

프로그래밍, 마이크로컨트롤러, 전자 제품 전반을 사랑하는 모든 분들의 저희 웹사이트 방문을 환영합니다! 이 기사에서는 우리가 여기서 할 일, 즉 ARM 마이크로컨트롤러 교육 과정에 대해 조금 설명하겠습니다.

그럼 먼저 ARM 학습을 시작하기 위해 알아야 할 것과 할 수 있는 것이 무엇인지 알아보겠습니다. 그러나 원칙적으로 매우 복잡하고 매혹적인 것은 없습니다 😉 물론 사람들은 일반적으로 이미 PIC 및 AVR을 충분히 플레이한 후 ARM 컨트롤러로 전환합니다. 즉, 대부분 숙련된 개발자입니다. 그러나 처음으로 마이크로 컨트롤러 프로그래밍을 시도하기로 결정한 사람들이 자료를 쉽게 이해할 수 있도록 우리가 분석할 모든 것을 가능한 한 자세하고 명확하게 설명하려고 노력할 것입니다. 그런데 궁금한 점이 있거나 단순히 의도한 대로 작동하지 않는 경우 댓글을 작성해 주시면 제가 해결하고 도와드리겠습니다.

이제 다음으로 넘어 갑시다 기술적 문제) 이미 "ARM 교육 과정"이라는 이름을 여러 번 언급했지만 대체로 이는 전적으로 사실이 아닙니다. ARM 마이크로컨트롤러 같은 것은 없습니다. ARM 코어(!)가 포함된 컨트롤러가 있지만 이는 여전히 동일하지 않습니다. 따라서 이러한 장치는 여러 회사에서 생산되며 그중 STMicroelectronics와 NXP Semiconductors가 눈에 띕니다. 이에 따라 STM 및 LPC 컨트롤러를 생산합니다. 저는 STM32를 선택했는데 더 좋았을 뿐입니다 =) 일단 STM32F10x 라인의 어떤 MK를 다루더라도 다른 어떤 MK와도 아무런 문제가 없을 것이라는 점은 STM의 매우 매력적입니다. 한 줄 – 하나의 데이터시트. 그런데 있습니다 엄청난 양 STM32 컨트롤러가 포함된 비싸고 그리 비싸지 않은 개발 보드는 매우 기쁩니다. 하지만 처음에는 하드웨어를 구입하기 전에 컨트롤러의 기능을 평가하기 위해 시뮬레이터에서 프로그램을 디버깅할 것입니다. 혹시라도 STMicroelectronics의 공식 웹사이트는 다음과 같습니다. -.

어쨌든 우리는 컴파일러 주제로 순조롭게 나아갔으므로 이에 대해 몇 마디 말씀드리겠습니다. 두 번 생각하지 않고 Keil을 선택했는데, 그 이유는 특히 강력한 내장 시뮬레이터 때문이었습니다. 그곳과 모든 레지스터에서 UART를 볼 수 있으며 로직 분석기도 사용할 수 있습니다. 한마디로 Keil은 나에게 대부분 유쾌한 인상만을 남겼습니다. 물론 몇 가지 단점도 있지만 치명적이지는 않았습니다. 따라서 Keil uvision4를 꺼진 상태에서 안전하게 다운로드할 수 있습니다. 대지(). 사실, 한 가지가 있지만 IDE는 유료이지만 코드 제한이 32kB인 데모 모드를 사용할 수 있습니다. 이는 현재로서는 충분합니다. 이것이 충분하지 않은 사람에게는 Keil에 엄청난 수의 균열이 있습니다 😉 모든 것이 문제없이 설치되었습니다. 우리는 몇 번 더 찌르고 모든 것이 완벽하게 설치되고 탬버린과 함께 추가 춤을 추지 않고도 작동합니다.

사실, 그게 제가 여기서 말씀드리고 싶었던 전부입니다. 이제는 말에서 행동으로 옮겨야 할 때입니다. 하지만 그건 다음 기사에 있습니다. STM32 마이크로컨트롤러 프로그래밍을 처음부터 배우겠습니다!

게시일: 2016년 8월 9일

마이크로컨트롤러 STM32강력한 성능, 상당히 다양한 주변 장치 및 유연성으로 인해 점점 인기를 얻고 있습니다. 우리는 비용이 $2(중국산)를 초과하지 않는 예산 테스트 보드를 사용하여 공부를 시작할 것입니다. 우리는 또한 필요합니다 ST-링크프로그래머의 비용은 약 $2.5(중국산)입니다. 이러한 금액은 학생과 학생 모두가 사용할 수 있으므로 여기에서 예산 옵션시작하자고 제안합니다.


이 마이크로컨트롤러는 마이크로컨트롤러 중에서 가장 강력하지는 않습니다. STM32, 그러나 가장 약한 것도 아닙니다. 다양한 보드가 있어요 STM32, 포함 발견비용은 약 20달러입니다. 그러한 보드에서는 거의 모든 것이 우리 보드와 동일하며 프로그래머도 있습니다. 우리의 경우 프로그래머를 별도로 사용하겠습니다.

마이크로컨트롤러 STM32F103C8. 형질

  • ARM 32비트 Cortex-M3 코어
  • 최대 주파수 72MHz
  • 프로그램용 64KB 플래시 메모리
  • 20Kb SRAM 메모리
  • 전원 공급 장치 2.0 ~ 3.3V
  • 2 x 12비트 ADC(0 ~ 3.6V)
  • DMA 컨트롤러
  • 37개의 5V 허용 입력/출력
  • 16비트 타이머 4개
  • 워치독 타이머 2개
  • I2C – 버스 2대
  • USART – 버스 3대
  • SPI – 버스 2대
  • USB 2.0 전속 인터페이스
  • RTC – 내장 시계

STM32F103C8 보드에서 사용 가능

  • 출력 포트 A0-A12, B0-B1, B3~B15, C13-C15
  • 마이크로 USB이를 통해 보드에 전원을 공급할 수 있습니다. 보드에는 3.3V 전압 안정기가 있습니다. 보드의 해당 핀에 3.3V 또는 5V 전원을 공급할 수 있습니다.
  • 단추 초기화
  • 점퍼 2개 부팅0그리고 부팅1. 플래싱하는 동안 이를 사용합니다. UART.
  • 2개의 석영 8MHz 및 32768Hz. 마이크로컨트롤러에는 주파수 체배기가 있으므로 8MHz 석영을 사용하면 최대 컨트롤러 주파수인 72MHz에 도달할 수 있습니다.
  • LED 2개. PWR– 전원이 공급된다는 신호입니다. PC13- 출력에 연결됨 C13.
  • 프로그래머용 커넥터 ST-링크.

그럼 마이크로 컨트롤러를 플래시하는 것부터 시작해 보겠습니다. 이는 USART를 통해 수행하거나 프로그래머를 사용하여 수행할 수 있습니다. ST-링크.

펌웨어에 대한 테스트 파일을 다운로드할 수 있습니다.. 프로그램은 보드의 LED를 깜박입니다.

Windows용 USB-Uart 어댑터를 사용하는 STM32 펌웨어

안에 시스템 메모리 STM32있다 부트로더. 부트로더는 생산 단계와 모든 마이크로컨트롤러에서 기록됩니다. STM32인터페이스를 통해 프로그래밍 가능 USART USART-USB 어댑터를 사용합니다. 이러한 어댑터는 널리 사용되는 미세 회로를 기반으로 가장 자주 만들어집니다. FT232RL. 먼저 어댑터를 컴퓨터에 연결하고 드라이버를 설치합니다(필요한 경우). 제조사 홈페이지에서 드라이버를 다운로드 받을 수 있습니다. FT232RL– ftdichip.com. 드라이버를 다운로드해야 합니다. VCP(가상 COM 포트). 드라이버를 설치한 후 컴퓨터에 가상 직렬 포트가 나타납니다.


연결 중 RX그리고 텍사스해당 핀으로 출력 USART1마이크로 컨트롤러. RX어댑터를 연결하세요 텍사스마이크로컨트롤러(A9). 텍사스어댑터를 연결하세요 RX마이크로컨트롤러(A10). USART-USB에는 3.3V 전원 출력이 있으므로 여기에서 보드에 전원을 공급합니다.

마이크로컨트롤러를 프로그래밍 모드로 전환하려면 핀을 설정해야 합니다. 부팅0그리고 부팅1원하는 상태로 설정하고 버튼으로 재부팅하세요 초기화또는 마이크로 컨트롤러의 전원을 껐다가 켜십시오. 이를 위해 점퍼가 있습니다. 다양한 조합으로 마이크로컨트롤러를 다양한 모드. 우리는 한 가지 모드에만 관심이 있습니다. 이를 위해 마이크로컨트롤러는 부팅0논리적인 것이 있어야 하며 출력은 부팅1– 논리적 0. 보드에서 점퍼 위치는 다음과 같습니다.

버튼을 누른 후 초기화또는 전원을 분리하고 연결하면 마이크로컨트롤러는 프로그래밍 모드로 들어가야 합니다.

펌웨어 소프트웨어

USB-UART 어댑터를 사용하는 경우 포트 이름은 다음과 같습니다. /dev/ttyUSB0

칩 정보 얻기

결과:

칩에서 dump.bin 파일로 읽어옵니다.

sudo stm32flash -r dump.bin /dev/ttyUSB0

칩에 쓰기

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

결과:

Stm32flash 0.4 http://stm32flash.googlecode.com/ 파서 사용: 원시 BINARY 인터페이스 serial_posix: 57600 8E1 버전: 0x22 옵션 1: 0x00 옵션 2: 0x00 장치 ID: 0x0410(중밀도) - RAM: 20KiB(512b 예약됨: 부트로더) - 플래시: 128KiB (섹터 크기: 4x1024) - 옵션 RAM: 16b - 시스템 RAM: 2KiB 메모리에 쓰기 메모리 지우기 주소 0x08012900 (100.00%) 쓰기 및 확인이 완료되었습니다. 주소 0x08000000에서 실행을 시작합니다... 완료되었습니다.

Windows용 ST-Link 프로그래머를 사용하는 STM32 펌웨어

프로그래머를 사용할 때 ST-링크결론 부팅0그리고 부팅1사용되지 않으며 컨트롤러의 정상적인 작동을 위해서는 표준 위치에 있어야 합니다.

(러시아어로 예약)

STM32 마킹

장치 제품군상품 유형장치 하위 제품군핀 수플래시 메모리 크기패키지온도 범위
STM32 =
ARM 기반 32비트 마이크로컨트롤러
F = 범용
L = 초저전력
TS=터치스크린
W = 무선 시스템온칩
60 = 멀티터치 저항성
103 = 성능선
F = 20핀
G = 28핀
K = 32핀
T = 36핀
H = 40핀
C = 48/49 핀
R = 64핀
O = 90핀
V = 100핀
Z = 144핀
I = 176핀
B = 208핀
N = 216핀
4 = 16KB의 플래시 메모리
6 = 32KB의 플래시 메모리
8 = 64KB의 플래시 메모리
B = 128KB의 플래시 메모리
Z = 192KB의 플래시 메모리
C = 256KB의 플래시 메모리
D = 384KB의 플래시 메모리
E = 512KB의 플래시 메모리
F = 768KB의 플래시 메모리
G = 1024KB의 플래시 메모리
I = 2048KB의 플래시 메모리
H = UFBGA
N=TFBGA
P = TSSOP
T = LQFP
유 = V/UFQFPN
Y = WLCSP
6 = 산업 온도 범위, –40…+85 °C.
7 = 산업 온도 범위, -40…+ 105°C.
STM32에프103 8 6

쓰기/읽기 방지를 제거하는 방법은 무엇입니까?

STM32F103이 포함된 보드를 받았지만 프로그래머가 이를 볼 수 없다면 이는 중국인이 마이크로 컨트롤러의 플래시 메모리를 보호했다는 의미입니다. “왜?”라는 질문 그것을 무시하자. 차단을 제거하기 위해 UART 어댑터와 프로그램을 연결합니다. 프로그래밍을 위해 점퍼를 설정하고 다음과 같이 진행합니다.

stm32flash 유틸리티를 사용하여 Ubuntu에서 이 작업을 수행하겠습니다.

1. 마이크로컨트롤러가 보이는지 확인하십시오.

Sudo stm32flash /dev/ttyUSB0

다음과 같은 결과를 얻어야 합니다:

Stm32flash 0.4 http://stm32flash.googlecode.com/ 인터페이스 serial_posix: 57600 8E1 버전: 0x22 옵션 1: 0x00 옵션 2: 0x00 장치 ID: 0x0410(중밀도) - RAM: 20KiB(512b는 부트로더에 의해 예약됨) - 플래시: 128KiB(섹터 크기: 4x1024) - 옵션 RAM: 16b - 시스템 RAM: 2KiB

2. 읽기 보호를 제거한 다음 쓰기 보호를 제거합니다.

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ 인터페이스 serial_posix: 57600 8E1 버전: 0x22 옵션 1: 0x00 옵션 2: 0x00 장치 ID: 0x0410(중밀도) - RAM: 20KiB( 512b는 부트로더에 의해 예약됨) - 플래시: 128KiB(섹터 크기: 4x1024) - 옵션 RAM: 16b - 시스템 RAM: 2KiB 읽기 보호 해제 플래시가 완료되었습니다. sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ 인터페이스 serial_posix: 57600 8E1 버전: 0x22 옵션 1: 0x00 옵션 2: 0x00 장치 ID: 0x0410(중밀도) - RAM: 20KiB( 512b는 부트로더에 의해 예약됨) - 플래시: 128KiB(섹터 크기: 4x1024) - 옵션 RAM: 16b - 시스템 RAM: 2KiB 쓰기 보호 플래시가 완료되었습니다.

이제 마이크로컨트롤러로 정상적으로 작업할 수 있습니다.

공유하다