Mecrisp-Stellaris와 emmello

로 이사하는 마지막 에피소드에서는 마이크로 컨트롤러가 정상적으로 볼 수있는 산업뿐만 아니라 해커를위한 것뿐만 아니라 해커도 …에 나는 아마도 당신을 싼 하드웨어의 부부 조각을 얻는 것에 대해 당신을 속이는 것입니다. 이번에는 해당 하드웨어에서 전세 시스템을 설치하고 필수 “Hello World”를 실행하고 LED 깜박입니다. 그러나 우리는 또한 마이크로 컨트롤러에서 매우 깔끔한 기능 중 하나에 딥을 취할 것입니다. 쉬운 멀티 태스킹.

일하다!

하드웨어

Mecrisp-Stellaris는 많은 수의 ARM 마이크로 컨트롤러로 실행되지만, 메이플 미니의 일반 사본 형태로 예외적으로 작은 돈을 할 수있는 STM32F103 칩에 초점을 맞추고, 종종 “STM32F103 최소 시스템 보드 “또는”푸른 알약 “은 폼 인자 때문에, 판매를 위해 붉은 색으로 사용되었다는 사실. 보드의 마이크로 컨트롤러는 72MHz에서 실행할 수 있으며, 20KB의 RAM이고 64 또는 128KB의 플래시가 있습니다. 그것은 많은 핀을 가지고 있으며, 디지털 전용이 5V 허용이며 정상적인 마이크로 컨트롤러 주변 장치가 있습니다. 가장 힘이 능률적이지 않으며 부동 소수점 유닛이나 DAC가 없지만 훨씬 적은 돈을 훨씬 적게 사용할 수있는 견고한 오래된 디자인입니다.

프로그래머가 연결되어 USB를 덮고 있습니다
프로그래머가 처음 칩을 깜박이는 데 필요한 프로그래머를위한 대량 생산 작업의 유사한 불가사의. ST-Link V2의 클론 중 하나가 잘 작동합니다. (아이러니하게도 충분히, 프로그래머 내부의 하드웨어는 대상과 거의 동일합니다.) 마침내 인터랙티브 쉘에서와 같이 실행되는 것을 고려하면 STM32 보드에 직렬 연결이 필요합니다. 아마도 USB / 직렬 어댑터를 나타냅니다.

이 전체 설정은 패스트 푸드 식사보다 훨씬 많은 비용이 많이 들지 않을 것입니다. 프로그래머와 USB / 직렬 어댑터는 아직 키트에 있지 않은 것들입니다.

보드 주위에 흩어져있는 다양한 3.3 및 GND 핀을 직접 직접 전원을 공급하거나 대상 보드의 마이크로 USB 포트 또는 5V 핀을 통해 전원을 공급할 수 있습니다. 후자의 두 가지 옵션은 3.3 핀으로 결합하기 전에 3.3 V 레귤레이터를 통과합니다. 모든 핀은 상호 연결되어 있으므로 한 번에 하나의 전원 공급 장치 만 사용하는 경우에 가장 좋습니다.

펌웨어 : Forth System.

Github에서 Super Special Hackaday-Edition MecRisp Form Package를 얻으십시오. “ROMS”디렉토리에 포함 된 시스템은 여기에서 데모를 위해 작동 할 수있는 시스템입니다. 나는 [JCW]의 탁월한 embello 앞바리 라이브러리에서 존경받을 수있는 기지에 적재되어 GPIO 구성, 지연 기능 등과 같은 것들을 공급합니다. 사용 가능한 훨씬 더 많은 도서관이 많이 있으며 다음에 그들을 필요로 할 때 그들을 살펴볼 것입니다.

Forth System을 사용하는 가장 멋진 것은 어떠한 방식 으로든 지원 소프트웨어가 필요하다는 것입니다. 제 4 번의 통역사는 자체 코드를 컴파일하며 직렬 터미널을 통해 해당 코드와 상호 작용합니다. 모든 일은 마이크로 컨트롤러 내에서 발생합니다. 그런 다음 한 장애물이 칩으로 나옵니다. 옛날에는 이건 수동으로 바이트에서 토글 링에 의해 수행되었습니다. 앞으로는 실제로이 방법을 문자 그대로 부트 스트랩 할 수있는 충분히 작습니다. 그러나 이미 칩 프로그래머를 얻었습니까?

[Texane]의 ST 유틸리티는 칩에 앞으로 나아갈 수있는 가장 쉬운 방법입니다. GitHub에서 다운로드하여 자신을 빌드하거나 배포판의 패키지 관리자로 운을 시도하십시오. (Windows Fookks, 당신은 밖으로 나오지 않습니다. 바이너리가 잠시 동안 업데이트를 보지 못했지만 할 수 있습니다.)

분명한 방식으로 프로그래밍 와이어를 연결하고 Magic Commands ST-Flash ERase 및 ST-Flash Write MeCrisp-Stellaris-Hackaday-edition.bin 0x8000000을 발행하십시오. 5 초 만에 럼블을 할 준비가 될 것입니다.

GND – GND.

SWCLK – CLK.

Swsio – Dio.

프로그래머를 얻으려면 당신이 가지고 있지 않다면 번거롭지 만 나머지 인생의 나머지 부분을 쉽게 만들고 “지불”을 클릭하고 기다리는만큼 기본적으로 얻을 수 있습니다. 우리 자신의 [알 윌리엄스] (관계 없음)는 GDB가있는 C 또는 Arduino 코드를 디버깅하는 것과 동일한 소프트웨어를 사용하는 데 최근의 게시물을 보유하고 있으므로이를 설정할 가치가 있습니다.

소프트웨어

직렬 연결, 노트북에 의해 구동
프로그래머를 지금 당장 멀리 놓고 STM32에 직렬로 연결하십시오. 기본 전송 속도는 115,200 여야합니다. 아직 전원을 뽑지 않으면 STM32 보드의 RESET 버튼을 누르십시오. 모두가 잘되면 익숙한 두개골과 십자가 렌치로 인사 할 것입니다. MECRISP는 라인 끝에있는 라인 피드를 기대하고 있으므로 LF + CR을 보내면 두 번 반환을 성공적으로 치고 있습니다.

A9 TX – Serial Rx.

A10 RX – 직렬 Tx.

GND – GND.

[JCW] FOLIE는이 응용 프로그램을위한 멋진 다중 플랫폼 직렬 터미널 에뮬레이터입니다. 일반적인 터미널 프로그램이하지 않는 것은 UP 화살표가있는 명령 줄을 다시 입력 할 수 있으므로 오랜 명령을 다시 입력하는 것보다 훨씬 쉽습니다. 또한자동으로 다른 파일을 포함합니다.이 파일은이 기사에 대한 바이너리를 구축 할 때 실질적으로 사용했습니다. 당신은 foori를 달릴 필요가 없지만, 나는 당신이 그것을 좋아할 것입니다.

안녕하세요

이제는 “Hello World”시간입니다. 당신이 새로운 것이라면, 여기에는 매우 선택적 인 소개가 있습니다. 2 번 2 +를 입력하고 Enter를 누릅니다. 그것은 괜찮습니다 .. 안심합니다. 맞습니까? 이제 유형을 입력하십시오. ( “도트”를 읽으십시오)와 놀라운 결과를 인쇄합니다. DOT는 내면화하려는 몇 가지 세계적인 Forewhands의 첫 번째입니다. 도트가있는 많은 명령은 결과를 즉시 인쇄합니다. .s (Dot-ESS)는 예를 들어 스택 컨텐츠를 인쇄합니다. 두 명의 관용구가 많이 볼 수있는 @ @ @ @ @ @ viewering 변수 또는 출력을 설정합니다. 코드를 스캔 할 때 머리에 “가져 오기”및 “설정”으로 읽으십시오.

그런 다음 함수를 작성하는 방법을 살펴 보겠습니다. : 함수 정의를 시작하고; 끝납니다. So : 4 2 2 +; 2 개와 둘을 추가하는 함수를 정의합니다. (그리고 실시간으로 그것을 컴파일하십시오!) 그런 다음이 함수를 즉시 호출 할 수 있습니다. 4. 우리의 함수가 스택에 2 개와 2 개의 합계를 남겼다는 것을 보여줄 것입니다. 이런 의미에서는 Forth의 기능이 실제로 작동하지 않습니다. 명시 적 인수를 취하거나 명시 적 값을 반환하지 않습니다. 스택에있는 데이터가 무엇이든간에 작업을 수행하고 결과를 그대로 두십시오. 그래서 제출 기능을 “단어”라고합니다. 나는 지금 부터이 협약에 찌르고있을 것이다.

여기서 마침내, “Hello World”입니다 : : HW. “Hello, World!” CR; “문자열은 언어가 구문 분석되는 방식 때문입니다. 컴파일러가 공백을 읽은 다음 발견 된 내용을 실행 한 다음 인쇄 A-String 사이에 공백이 있어야합니다. 명령 (. “) 및 인쇄 할 첫 번째 문자. 인쇄 명령은 닫을 때까지 앞으로 스캔합니다. “라도 여분의 공간이 필요하지 않습니다. CR 캐리지 리턴을 보냅니다. 프롬프트에서 HW를 입력하십시오. 안녕하세요, 세계!

깜박임 LED

일련의 텍스트 입력 및 출력이 너무 쉽지 않지만 LED가 깜박이면 마이크로 컨트롤러의 표준 “Hello World”이므로 일부 GPIO의 시간입니다. 시스템 이이 특정 마이크로 컨트롤러 보드에 대해 이미 구성되어 있기 때문에 LED ON으로 바꾸는 것은 프롬프트에서 LED를 입력하는 것처럼 쉽습니다. 그것을 끄고 싶습니까? led.off. 수동 깜박임은 꽤 빨리 오래되었을 것입니다. 그래서 깜박임 단어를 작성해 봅시다. : 깜박임 LED.ON 100ms LED.OFF 200 ms; 트릭을 할 것입니다. 깜박임 깜박임 깜박임을 시도하십시오. 내 깜박임 데모 코드를 참조하십시오. (수천 밀리 초 만에 MS에서 더 많은)

GPIO 초기화의 세부 사항은 Core / Hackaday / LED.FS 및 Embello의 STM32F1 / IO.FS에서 각각 숨겨져 있습니다. 파기를 통해 표준 초기화 절차가 표시됩니다. 특정 핀은 STM32의 주변 장치 제어 레지스터의 일부 비트를 뒤집어 출력으로 설정됩니다. [JCW]는 PC13 Omode-PP IO 모드와 같이 푸시 풀 드라이버를 사용하여 푸시 풀 드라이버로 핀을 출력으로 설정하는 이들을 정의했습니다. ( “!”기억하십시오. 변수 또는 레지스터의 값을 표시합니다.)

ADC 입력을 위해 PIN PA7을 구성하려면 PA7 iMode-ADC IO 모드!. 내장 풀업 또는 풀다운 저항을 사용하여 테스트 버튼 : PA3 iMode-Pull IO 모드! 그리고 True PA3 IO를 사용하여 출력을 위 또는 아래로 설정하십시오! 또는 PA3 iOS!. 그런 다음 나중에 PA3 IO @ ( “IO GET”)로 버튼 상태를 읽을 수 있습니다.

STM32 칩의 GPIO는 매우 유연하며 데이터 시트의 구성 옵션을 깊이있게하려면 [JCW]의 IO.FS 코드를 사용 하여이 모든 것을 상당히 쉽게 설정할 수 있습니다. 예를 들어, io.all은 모든 GPIO 레지스터와 그 가치를 인쇄합니다.이 값은 대화식 디버깅에 큰 도움이됩니다. 그 말은 훨씬 더 많은 사용자 친화적 인 하드웨어 추상화 계층을 기부하고 싶다면 여기에 몇 가지가 있습니다.

빠른 멀티 태스킹

이제 우리는 깜박이는 LED와 직렬 포트 인쇄 “Hello World”가 있습니다. 나쁜 출발이 아니며,이 두 가지 모두 좋은 사용을 잘 사용합니다. 깜박임을 입력하면 LED 만 켜집니다. 나에게 한 장의 덕도리 중 하나는 다음과 같은 단어의 대화 형 테스트 사이를가는 편리한 다음 작업 시스템에 기능을 배포하는 것이 쉽습니다. 한 가지 이유는 거의 모든 동시가 기본적인 협력적인 멀티 태스킹을 지원한다는 것입니다. 여기에 내가 의미하는 바에요.

첫째, 우리는 깜박임 기능을 반복하여 너무 많이 입력 할 필요가 없습니다. : BB가 다시 깜박입니다. 영원히 실행될 “나쁜 깜박임”의 함수, BB를 만듭니다. “Run Forever”의 문제점은 재설정 버튼을 물리적으로 누르지 않고 통역사의 명령 줄로 돌아 오지 않고 RAM에서 작업하고있는 모든 것이 손실됩니다.

대신 루프에서 깜박임을 끊습니다. : GB BIGHT BINK 키? 까지 ; 키보드의 일부 입력이있을 때까지 깜박임 명령을 실행할 함수를 만듭니다. 이 특별한 루핑 구조는 시스템을 매달지 않고 계속 실행하려는 기능을 테스트하는 데 매우 유용합니다. 그것을 지키십시오n 마음.

우리가 원하는 방식 만 실행하기 위해 깜박임 기능을 조정하면 백그라운드 작업을 만들어 무인으로 깜박일 수 있습니다.

작업 : BlinkTask.
: 깜박 거리다&
blinktask 활성화
다시 깜박이기 시작하십시오
…에
멀티 태스크
깜박 거리다&

간단히 말해, 작업 : Word는 우리가 깜박이는 백그라운드 태스크에 대한 메모리 공간을 생성합니다. 함수가 깜박이고 백그라운드에서 작업을 수행합니다. BlinkTask 태스크 컨텍스트를 사용하고 실행을 시작해야한다고 선언하여 깜박이는 & 시작됩니다. 그런 다음 결코 떠나지 않는 무한한 깜박이는 루프로 들어갑니다. 멀티 태스킹은 멀티 태스킹을 켜고 깜박이는 & 실행됩니다. 그것을 실행하면 콘솔과 상호 작용할 수있는 동안 LED가 깜박입니다. 달콤한. 작업을 입력하면 두 가지가있는 두 가지가 있음을 알 수 있습니다. 하나는 우리의 깜박임이고 다른 하나는 대화식 인터프리터입니다.

그러나 깜박임 작업은 다른 동시 프로세스에 굴복 할시기를 어떻게 알 수 있습니까? 앞으로, 단어가 일시 중지 된 현재 맥락에서 수확량을 수확하고 다음 둥근 로빈 멀티 태스킹으로 이동합니다. MS 함수는 일시 중지 명령으로 구성되므로 단일 작업 설정에서 차단 지연이 다른 작업과 함께 환상적으로 잘 재생됩니다.

협력적인 멀티 태스킹에 관한 좋은 점은 선제 시스템에서 찾을 수있는 글리치를 제거하는 데 도움이 될 수있는 컨텍스트 스위치가 될 때 정확하게 통제한다는 것입니다. 단점은 당신이 당신의 기능을 지금 일시 중지하는 것을 기억하는 책임이 있으며, 당신은 타이밍을 확인해야합니다. 물론 이것은 마이크로 컨트롤러이며 팔의 매우 풍부한 내부 인터럽트 컨트롤러도 함께 사용할 수 있습니다.

마이크로의 멀티 태스킹의 진정한 점은 작은 데몬을 작성, 테스트 및 배포하기위한 훌륭한 워크 플로우를 만드는 것입니다. “항상 켜짐”이되는 기능. 먼저, 동작을 한 번 작성하는 기능을 작성하십시오. 둘째, 이스케이프 해치가있는 루프에서 테스트하십시오. 셋째, 일단 작동하면 이스케이프를 제거하고 백그라운드 타스크를 작성하십시오. 그런 다음 다른 작업 내에서 유휴 상태와 깨우기를 사용하여 켜고 끌 수 있습니다. 훨씬 더 자세한 내용은 mecrisp의 multistask.txt, 소스를 참조하십시오.

무엇 향후 계획?

지금까지 우리는 Jeelabs의 Embello Frame 워크 워크의 추가 라이브러리가있는 Mecrisp-Stellaris를 설정하고 빠른 데모를 실행합니다. 이것이 당신의 관심을 끌었다면 다음에 실제 소프트웨어를 구축하는 연습을 할 것입니다. Mecrisp가 Flash 대 RAM, 입력 및 출력 및 대화식 개발의 실천과 플래시 대의 뉘앙스를 처리하는 방식에 대해 훨씬 더 많은 것이 훨씬 더 많이 있습니다. 일하는 정말로 괴상한 측면 중 일부는 재미있는 머리를 올리면 어쨌든 그들을 사랑하는 법을 배울 것입니다.

그 동안 싼 STM32F103 보드가 우리의 바이너리로 깜박이고 칩에서 바이너스 환경에서 놀기 위해 조금 사용하는 데 조금 사용됩니다. 일부 LED가 깜박입니다. Mecrisp-Stellaris 용어집과 embello API 문서를 둘러보십시오. 또는 처분 할 때 모든 명령을보고 해킹을 시작하기 위해 목록을 입력하십시오.

Leave a Reply

Your email address will not be published.