eziya76의 등록된 링크

키자드에 등록된 총 592개의 포스트를 확인하실 수 있습니다.

Naver Blog

[STM32 HAL] LwIP TCP Client

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_LWIP_LAB/tree/master/STM32F4_HAL_ETH_TCPCLIENT오늘은 지난 번 Echo Server 에 이어서 lwIP Raw API 기반으로 Tcp Client 예제를 한번 작성해 보았습니다. Raw API 는 RTOS 를 사용하지 않는 경우 callback 기반으로 동작하는데 socket 과는 상이한 부분이 많아서 사실 socket API 로 코딩하면 쉽게 구현이 가능한 부분도 문서를 찾아가며 개발을 하다보니 좀 복잡하다는 생각이 들었습니다. 하지만 RTOS 기반이 아닌 경우 blocking 을 막기 위해서는 callback 기반으로 동작하는 것이 필요하며 NodeJs 와 같이 call.......

Naver Blog

[STM32 HAL] RTOS + LwIP TCP Echo Server

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_LWIP_LAB/tree/master/STM32F4_HAL_ETH_RTOS_TCPECHO몇일 전에 Raw API 를 사용한 방식의 echo server 예제를 포스팅 하였습니다. 오늘은 RTOS 와 netconn API 를 사용한 echo server 예제를 포스팅 하고자 합니다. 예전에 한번 정리하였던 글인데 해당 글을 정리할 때는 소스를 github 에서 관리하지 않던 시기여서 전체 프로젝트 소스가 없다보니 요청을 하시는 분들도 많이 계셔서 이번에 다시 한번 정리해 보게 되었습니다. https://blog.naver.com/eziya76/221854875861우선 프로젝트의 구성이나 코드는 netcon.......

Naver Blog

[STM32 HAL] RTOS + LwIP TCP Client

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_LWIP_LAB/tree/master/STM32F4_HAL_ETH_RTOS_TCPCLIENT오늘은 몇일전에 작성하였던 Raw API 를 사용한 TCP Client 예제를 netconn API 사용한 방법으로 수정한 내용을 정리해 보고자 합니다. CubeMx 설정관련한 내용은 앞선 LwIP 예제에서 여러번 다루었기 때문에 별도로 추가 설명하지 않고 앞선 LwIP TCP Echo Server 예제나 그 외 별도 LwIP 관련 글들을 참고하시면 충분하실 것 같습니다. 기본적으로 생성된 프로젝트 파일에서 수정이 필요한 부분은 main.c 와 freertos.c 파일입니다.main.c 파일에서는 print.......

Naver Blog

[STM32 HAL] RTOS + LwIP + MQTT Client

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_ETH_MQTT_CLIENT요즘 업무가 바쁘다 보니 공부하는 시간에 대한 투자 여유가 없어져서 오랜 만에 글을 올리게 됩니다. 오늘은 MQTT Client 구동 관련하여 이번에 제가 테스트 해 본 내용을 정리해 보고자 합니다. MQTT(Message Queuing Telemtry Transport) 라고 많이들 들어보셨을 것 같고 MQTT 가 무엇인지는 저보다 많은 지식을 갖고 잘 정리한 분들이 많기 때문에 Google 을 검색하여 보시면 될 것 같습니다.제 글은 MQTT 가 무엇이고 어떻게 동작하는지에 대해서가 아니라 응용적인 측면에서 STM32 상에서 MQTT.......

Naver Blog

[STM32 HAL] RTOS + LwIP + MBEDTLS#1

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_ETH_MBEDTLSReferencehttps://engschool.tistory.com/entry/SSLTLS-embedded-for-IoT-8https://cxemotexnika.org/2018/10/primer-zashhishhennogo-https-soedineniya-s-ispolzovaniem-mbed-tls/https://github.com/PetroShevchenko/cxemotexnika/tree/master/Examples/NUCLEO_F429ZI/nucleo_f429zi_https_client근래에 MQTT 를 테스트하면서 결국 Amazon IOT 나 기타 서비스들을 이용하기 위해서는 SSL/TLS 기반의 보안 통신 기반이 준비되어야만 하기 때문에 MbedTLS 쪽을 살펴보게 되었습니다. 먼저 MBEDTLS 를 테.......

Naver Blog

[PIC32 Harmony] Timer Driver

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_TIMER_DRIVER/Referencehttps://microchipdeveloper.com/harmony:example-tmr지난 글 Timer System Service 테스트에 이어서 이번 글에서는 Timer Driver 를 직접 이용하는 방법에 대하여 정리해 보도록 하겠습니다. Timer System Service 는 하나의 타이머를 이용해서 여러 개의 Timer Client 를 만들어서 다양한 주기로 동작하는 application 을 만들 수 있었지만 결국 application 의 running frequency 가 하나라는 제약이 있습니다. 유사한 주기의 Timer client 라면 문.......

Naver Blog

[PIC32 Harmony] ADC + Timer

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_ADC/Reference https://microchipdeveloper.com/harmony:example-adc-wi-fire오늘은 Harmony 를 이용한 ADC 에 대하여 정리해 보도록 하겠습니다. Wi-Fire 보드에는 아래와 같이 AN8 핀에 가변저항이 달려있어 해당 가변저항값을 ADC 로 읽어보는 예제를 작성하도록 하겠습니다. 기본적인 틀은 거의 MicrochipDeveloper 사이트의 예제와 동일하며 타이머나 UART 출력 부분만 수정하거나 추가하였기 때문에 Reference 링크를 참고하시면 도움이 되실 것 같습니다. 예제 순서는.......

Naver Blog

[PIC32 Harmony] SD Card + File System

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_SDCARD/firmwareReferencehttps://microchipdeveloper.com/harmony:audio-player-lab2http://ww1.microchip.com/downloads/en/DeviceDoc/Driver%20Libraries%20Help%20v2.06.pdf이번에는 Harmony 를 이용해서 SD 카드를 Read/Write 하는 방법에 대해서 정리해 보도록 하겠습니다. 예제는 버튼을 누를 때마다 first.txt 라는 파일을 오픈하고 문자열을 쓴 후에 파일을 닫았다가 다시 파일을 열어서 해당 문자열을 읽어 UART 로 전송하는 예제를 만들어 보도록 하겠습니다. 프.......

Naver Blog

[PIC32 Harmony] I2C + BME280

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_I2C_BME280/firmwareReferencehttps://github.com/BoschSensortec/BME280_driver오늘은 Harmony 를 이용한 I2C 테스트를 진행하여 보도록 하겠습니다. 기존에 STM32 HAL 드라이버를 사용하여 테스트를 해본 센서이기 때문에 세부적인 내용은 아래 링크를 참조 부탁드리겠습니다. https://blog.naver.com/eziya76/221486711330프로젝트 생성 순서는 다음과 같습니다. 1) 하모니 프로젝트를 생성하여 줍니다. 2) HMC 하모니 Configurator 를 실행하여 줍니다. 3) Clock 탭에서 C.......

Naver Blog

[PIC32 Harmony] WIFI(MRF24WG0MA) + TCP

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_MRF24WG/firmwareReferenceshttps://microchipdeveloper.com/wifi:wh2020.02.04 수정사항아래 이슈사항 중 application task priority 보다 system task priority 가 높은 경우 동작하지 않던 문제 수정1) application task 는 priority 2로 설정, system task 는 priority 3으로 설정2) Wi-Fi driver 항목에서 Use SPI with DMA in Wi-Fi driver 항목 Enable3) Wi-Fi driver 항목에서 Intialization task, MAC task priority 를 level3 으로 변경4) SPI driver 항목에서 Use DMA .......

Naver Blog

[PIC32 Harmony] WIFI(MRF24WG0MA) + HTTP RESTful API (ThingSpeak.com)

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_MRF24WG_RESTful/firmware이번 글에서는 지난번 Wifi 드라이버 테스트와 BME280 테스트 코드를 확장해서 Mathworks 의 ThingSpeak.com 의 RESTful API 를 이용하여 온습도 데이터를 Upload 하는 테스트를 진행하여 보았습니다. Wifi 드라이버 테스트와 BME280 테스트는 각각 해당 글을 참고 부탁 드리며 이번 글에서는 TCP 소켓을 이용하여 HTTP Restful API 를 사용하는 방법을 중심으로 정리해 보도록 하겠습니다. Mathworks 의 https://thingspeak.com/ 사이트는 아래와 같.......

Naver Blog

[PIC32 Harmony] USB Host Mass Storage

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_USB_HOST_MSD/firmwareReferencehttps://github.com/Microchip-MPLAB-Harmony/usb/wiki/Create-your-first-usb-host-msd-application오늘은 Harmony 를 이용해서 USB 저장장치 테스트를 진행하여 보았습니다. 지난 MRF24WG Wifi 모듈과 마찮가지로 Harmony 를 이용한 USB 저장장치 연동도 몇 가지 이슈들이 발생을 하였고 결론적으로 든 생각은 가격이 저렴하기는 하지만 역시 아두이노용으로 개발된 보드이다 보니 Harmony 레퍼런스가 적고 문제가 발생한 다른 개발자들의 이력.......

Naver Blog

[STM32 FreeRTOS] 자료 Review#1

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_FREERTOS_LABST 에서 제공하는 자료들을 기반으로 FreeRTOS 의 기본 특성에 대해서 정리하여 보고 해당 자료의 Lab 코드들을 테스트해 보고자 합니다. API 를 살펴보면 Task 관리, 스케쥴링, 동기화, 타이머 기능등을 제공하는 것을 확인할 수 있다.FreeRTOS API 와 CMSIS(Cortex Microcontroller Software Standard)-RTOS API 를 모두 사용할 수 있으며 CMSIS-RTOS API 를 사용하여 개발하는 경우, 하위 RTOS 가 FreeRTOS 가 아닌 다른 CMSIS-RTOS API 를 지원하는 타 RTOS 이식하는 경우 이식성이 좋아질 수 있다. Fre.......

Naver Blog

[STM32 FreeRTOS] 자료 Review#2

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/STM32F4_HAL_FREERTOS_LABST 에서 제공하는 자료들을 기반으로 FreeRTOS 의 기본 특성에 대해서 정리하여 보고 해당 자료의 Lab 코드들을 테스트해 보고자 합니다. Queue 는 task 간 동기화와 함께 데이터를 공유하는 용도로 사용가능osMessageCreate() 함수로 생성osMessagePut()함수로 큐에 데이터 전달osMessageGet() 함수로 큐에서 데이터 수신osEvent 구조체는 union 을 이용하여 uint32_t 값 형태의 데이터 v를 사용하거나 pointer 변수 p 를 사용할 수 있음. osMailCreate 를 사용하는 경우에는 mail_id 를 사용하고 osMessag.......

Naver Blog

[PIC32] OC1 Dual Compare Match

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_OC_DUAL.X지난 글에 이어서 오늘은 dual compare mode 를 테스트 해보고자 합니다. dual compare mode 는 output 동작에 따서 single output pulse 모드와 continuous output pulse 모드로 나누어 집니다. single output pulse 모드에서는 output compare 모듈이 설정되면 1회만 pulse 가 출력됩니다. 1회 OCx 핀에 pulse 가 출력된 이후에는 타이머가 reset 후 다시 카운터가 match 되더라도 pulse 를 출력하지 않습니다. 앞선 글의 single compare 에서는 OCxR 레지스터만 사용되었지만.......

Naver Blog

[PIC32] OC1 PWM Mode

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_OC_PWM.X오늘은 output compare 관련 마지막인 PWM 모드에 관련한 테스트를 진행해 보도록 하겠습니다. PWM 모드는 앞선 OC 모드 중에서 가장 직관적으로 PWM 파형을 생성할 수 있는 모드입니다. PR 레지스터는 PWM 의 주기를 설정하는데 사용되고 OCxR 레지스터는 duty 를 설정하는데 사용됩니다. OCxR 레지스터의 값은 타이머 overflow 시에 OCxRS 레지스터의 값으로 업데이트 됩니다. 아래 그림을 보면 PR3 가 5이고, OCxR / OCxRS 가 2라고 하면 타이머가 초기화되고 TMR 값이 0 이 되는.......

Naver Blog

[PIC32] Class 1 ADC

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_ADC_BASIC.XReferenceshttp://ww1.microchip.com/downloads/en/DeviceDoc/Section22._12-bit_HS_SAR_ADC_FRM_DS60001344E.pdfhttp://ww1.microchip.com/downloads/en/DeviceDoc/PIC32MZ-EF-%20Family-DS60001320F.pdf오늘은 PIC32MZ 의 ADC 테스트를 진행해 보고자 합니다. 처음에 Reference 메뉴얼을 열었을 때 페이지 수를 보고 빠른 시간 내에 모든 기능을 파악하기는 어렵다고 생각이 들었고 나중에 써 먹을 수 있을 정도롤 기억을 하기는 어렵다는 생각이 들었습니다. 그래서 기본적.......

Naver Blog

[PIC32] Class 3 ADC Multi Scan + Interrupt

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_ADC_MULTI_INPUTS.X지난 글에서는 ADC0, ADC1 을 이용해서 각각 AN0, AN1 입력에 대해서 테스트를 진행하였고 오늘은 ADC7 을 이용해서 class3 AN38, AN39 를 테스트해 보고자 합니다. 아래와 같이 ADC7 모듈은 AN5~AN42까지 class2, class3 ADC 용으로 사용됩니다. 대부분의 코드는 아래와 같이 앞서 테스트를 진행한 class1 ADC 와 유사합니다만 일부 코드들은 class3 동작과 인터럽트 동작을 위해서 변경되어야 합니다. 주요 변경점은 아래와 같습니다. 1) class3 ADC 를 이용하여 scan 방.......

Naver Blog

[PIC32] Class 1 ADC Timer Trigger

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_ADC_TIMER_TRIGGER.X오늘은 타이머 Trigger 를 이용한 ADC 동작을 테스트해 보도록 하겠습니다. 아래 테이블을 보시면 Individual trigger source 는 class1 또는 class2 ADC 만 가능하며 class3 ADC 는 scan trigger 동작만 수행가능합니다. class1 의 trigger 는 sampling 을 끝내고 conversion 을 시작하도록 합니다. conversion 이 끝나면 다시 자동으로 sampling mode 로 동작합니다. class2의 trigger 는 sampling 을 시작하도록 합니다. class2 ADC 는 shared ADC 모듈을 사용하기.......

Naver Blog

[PIC32] Class 1 ADC + DMA

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_ADC_DMA.XReference : https://tutorial.cytron.io/2017/09/01/i2s-pic32mxmz-direct-memory-access-dma/이번 글에서는 ADC 관련하여 마지막으로 DMA 동작을 확인하여 보고자 합니다. ADC 동작은 빠른속도로 처리해야 하는 경우가 있을 수 있으며 ADC 자체가 목적이 되기 보다는 ADC 로 얻은 값을 갖고 데이터를 처리하는 경우가 많기 때문에 ADC 를 DMA 로 처리하면 별도의 Polling 이나 Interrupt 처리가 필요없이 수행하고자 하는 동작 자체에 집중을 할 수 있기 때문에 프로그램의 유지보.......

Naver Blog

[PIC32] SPI + 25LC010A EEPROM

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_SPI_25LC010A.X지난 번 PIC18F45K20 을 이용해 테스트 해 보았던 25LC010A EEPROM 을 그대로 PIC32MZ SPI 테스트를 위해서 사용해 보았습니다. 25LC010A 핀 아웃 정보는 아래 링크에서 확인하실 수 있습니다.https://blog.naver.com/eziya76/221638975554PIC18F 와 PIC32MZ 의 SPI 코드는 거의 동일한 방식으로 동작시킬 수 있습니다. 물론 약간 레지스터의 명칭이 바뀌거나 추가적인 기능 등으로 PIC18F 에는 없는 비트 들이 있지만 기본 전송 기능은 PIC18F 를 만져본 사람이라면 익숙하게 다.......

Naver Blog

[PIC32] SPI + SSD1306 OLED + u8g2 library

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_SPI_U8G2.X오늘은 PIC32MZ 에서 SPI 방식으로 u8g2 라이브러리를 이용하여 SSD1306 OLED 제어를 테스트해 보고자 합니다. 기존에 STM32 정리과정에서 u8g2 라이브러리 포팅과 관련한 핵심적인 부분은 정리를 하였기 때문에 별도로 u8g2 포팅 관련한 내용은 정리하지 않고 하기 링크를 참조 부탁 드리겠습니다. https://blog.naver.com/eziya76/221501476403https://github.com/olikraus/u8g2/wiki/Porting-to-new-MCU-platform핵심으로 바로 들어가서 u8g2 라이브러리를 포팅하기 위해서는.......

Naver Blog

[PIC32 Harmony] GPIO Input + Output

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_GPIO_BASIC지난 번 글에서 SPI 테스트까지는 Harmony 를 사용하지 않고 직접 레지스터를 제어하는 방식을 사용하였다면 이번 글 이후에서는 Harmony 를 사용하고자 합니다. 목표하고 있는 테스트 범위는 기본 peripheral 제어에 SD카드를 이용한 file system 및 Wifi 를 이용한 TCP/IP 까지 포함해 보고자 합니다. 테스트에 사용하는 보드는 Digilent 의 Wi-Fire 보드이며 PIC32MZ2048EFG100 을 채용하고 있으며, SD 카드와 MRF24WG0MA Wifi 모듈을 포함하고 있습니다. https:.......

Naver Blog

[PIC32 Harmony] UART Interrupt + Ring Buffer

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_UART이번 글에서는 Harmony 를 이용해서 UART 를 테스트 해 보고자 합니다. 기존에 Harmony 를 사용하지 않고 개발하였던 글에 레지스터에 관련한 상세한 부분은 정리가 되어 있기 때문에 참고 부탁 드리겠습니다.https://blog.naver.com/eziya76/221715510674먼저 MPLAB 하모니 프로젝트를 생성한 후, Harmony Configurator 를 실행하여 줍니다. 클럭을 아래와 같이 설정하여 줍니다. WiFire 보드는 외부 External Clock 을 통해서 24MHz 를 공급받아 최대 200MHz 로 동작 가능.......

Naver Blog

[PIC32 Harmony] External Interrupt

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_EXTI/오늘은 Harmony 를 이용해서 External Interrupt 를 시험해 보도록 하겠습니다. 앞 글에서 다룬 내용들은 반복해서 다루지 않기 때문에 해당 내용은 이전 글을 참고 부탁 드리겠습니다. 예를 들어서 앞으로 UART 를 사용하는 경우에는 간단하게 UART 를 설정한다라고만 언급하고 세부적인 설정이나 관련 코드에 대해서는 기술하지 않기 때문에 앞선 글에서 정리한 UART 관련 글을 참고 부탁 드리겠습니다. 1) 먼저 Harmony 프로젝트를 생성하고, HMC(Harmony Configurato.......

Naver Blog

[PIC32 Harmony] Timer System Service

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/Harmony/PIC32MZ_HMC_TIMER_SERVICEReferencehttps://microchipdeveloper.com/harmony:example-tmr이번 글에서는 Harmony 를 이용한 Timer System Service 에 대하여 정리해 보도록 하겠습니다. Microchip Developer 사이트의 하모니 예제를 참고하였습니다. Harmony Timer System Service 는 하나의 타이머 인스턴스를 사용하여 여러 개의 Interval 로 동작하도록 할 수 있는 특징이 있습니다. 예제에서는 100ms 로 동작하는 타이머 클라이언트와 500ms 로 동작하는 타이머 클라이언트를 생성하여서.......

Naver Blog

[PIC32] Clock 설정 & 성능 관련 설정#2

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. Reference : Programming 32-bit Microcontrollers in C written by Lucio Di Jasiohttps://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_PERFORMANCE_TEST.X우선 예제는 Reference 에 있는 FFT 예제 코드를 그대로 사용하였습니다. 실제 저도 FFT 연산은 Time-domain 성분을 Frequency-domain 성분으로 보고자 할 때 사용한다는 수준으로만 알고 있기 때문에 세부 코드의 흐름은 이해하지 않고 단순히 연산수행을 목적으로만 사용하였습니다. 테스트는 우선 3가지로 나누어서 진행하였습니다. 테스트#1: pic32_init_cache.S 파일을 수정하여.......

Naver Blog

[PIC32] UART Polling 테스트

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_UART_BASIC.X이번 글에서는 UART Polling 관련한 기능을 테스트 해보도록 하겠습니다. 다양한 기능을 모두 이용한다면 하나하나의 레지스터 항목을 모두 알아야겠지만 우선은 기본적인 동작을 확인하는 차원에서 설정이 필요한 부분을 우선적으로 확인하여 보겠습니다. [ ON : UARTx Enable ]0: Disable1: Enable[ BRGH : High Baud Rate Enable ]0: Standard Speed Mode - 16x baud clock enabled1: High-Speed Mode - 4x baud clock enabled[ PDSEL : Parity & Data Selection ]0: .......

Naver Blog

[PIC32] UART Interrupt + Ring Buffer 테스트

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_UART_QUEUE.XRing buffer library reference https://github.com/AndersKaloer/Ring-Buffer지난번 Polling 방식으로 동작하는 코드에 이어서 인터럽트 방식으로 동작하도록 코드를 수정하고 Ring Buffer 를 적용해 보았습니다. 기본적인 설정과 관련한 부분은 UART 를 Polling 동작으로 설정하는 것과 거의 동일하기 때문에 이번 글에서는 Interrupt 설정과 관련한 부분 위주로 정리하겠습니다. 우선 PIC32MZ 에서 인터럽트 처리를 위해서는 PIC18F 와 다른 몇가지 개념들을 추가적으로 이.......

Naver Blog

[PIC32] External Interrupt

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_EXTERNAL_INTERRUPT.X이번 글에서는 External Interrupt 테스트를 진행해 보고자 합니다. 우선 External Interrupt 는 INTCON 레지스터의 INTxEP 비트를 설정하여 Polarity 를 설정합니다. 0 은 falling edge 이며 1은 rising edge 입니다.이번 예제에서는 INT4 를 사용하고자 합니다. INT4 의 Vector name 은 _EXTERNAL_4_VECTOR 이며, IFS0 / IEC0 / IPC5 레지스터를 이용합니다.INT4 핀은 PPS 를 이용하여 아래와 같이 RPD3 ~ RPD7 까지 여러핀 중 하나를 사용할 수 있습니다. 저는 RPA15.......

Naver Blog

[PIC32] Change Notification

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_CHANGE_NOTIFICATION_INTERRUPT.X이번 글에서는 Change Notification 관련 테스트를 진행하여 보고자 합니다. 관련 레지스터CNCONx: Change Notification 모듈 동작을 설정합니다.CNENx: Change Notification 에 사용할 Rising Edge 핀을 결정합니다. CNNEx: Change Notification 에 사용할 Falling Edge 핀을 결정합니다.CNSTATx: Mismatch 모드로 동작 시 마지막 PORTx 를 Read 한 상태와 현재 상태의 차이를 나타냅니다.CNFx: Rising/Falling Edge 발생을 나타냅니다.CNPUx: 내장 Pull-up.......

Naver Blog

[PIC32] T1 Synchronous Clock Counter

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_T1_SYSTICK.X[배경지식]PIC32M 시리즈는 아래와 같이 "A", "B" 두가지 타입의 타이머 제공A 타입 타이머의 특징은 외부 Clock 을 사용하여 Sleep 모드 시에도 동작하며 Wakeup 동작을 수행할 수 있다는 점B 타입 타이머의 특징은 2개의 타이머를 묶어서 32 비트 타이머로 동작할 수 있다는 점과 ADC 트리거 동작 등을 수행하는 Trigger 기능을 지원하는 점Type A 타이머 (TIMER1)- Asynchronous timer/counter with a built-in oscillator - Operational during CPU Sleep.......

Naver Blog

[PIC32] T32 32-bit Synchronous Clock Counter

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_T32_SYNC_CNT.X이번에는 지난번 글에 이어서 32-bit Synchronous Clock Counter 동작을 테스트 해 보고자 합니다. PIC32MZ 의 타이머 모드는 앞선 글에서 설명한 것과 같이 4가지 종류가 있으며 이 중에서 1번 항목에 해당합니다. 타이머 모드 분류1) 16/32-bit Synchronous Clock Counter PBCLK 를 Clock 소스로 사용시간 측정, Delay, 주기적인 타이머 인터럽트 발생 필요 시 사용2) 16/32-bit Synchronous External Clock Counter TxCK 핀으로 들어오는 Clock 을 소스로 사용외부 Clock 을.......

Naver Blog

[PIC32] T2 Synchronous External Clock Counter

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_T2_EXT_CLK.X이번 글에서는 2번 모드에 해당하는 16-bit Synchronous External Clock Counter 를 테스트해 보도록 하겠습니다. External Clock Counter 모드는 외부 TxCK 핀으로 들어오는 Clock 을 카운팅하는데 유용합니다. 내부 System Clock 을 기준으로 TxCK 핀에 들어오는 Clock 을 카운트하여 주기를 계산할 수도 있으며 카운터 값이 일정한 숫자 이상이되면 동작을 수행하도록 할 수도 있습니다. 타이머 모드 분류1) 16/32-bit Synchronous Clock Counter PBCLK 를 Clock 소스로 사용시.......

Naver Blog

[PIC32] T32 Gated Timer

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_T32_GATED.X이번 글에서는 3번 모드에 해당하는 32-bit Gated Timer 를 테스트해 보도록 하겠습니다. Gated Timer 모드는 외부 TxCK 핀의 상태가 High 상태를 유지하는 동안 카운터가 증가하기 때문에 동작 상태가 얼마나 유지되는지 확인하는데 유용하게 사용할 수 있습니다. 타이머 모드 분류1) 16/32-bit Synchronous Clock Counter PBCLK 를 Clock 소스로 사용시간 측정, Delay, 주기적인 타이머 인터럽트 발생 필요 시 사용2) 16/32-bit Synchronous External Clock Counter TxCK 핀으.......

Naver Blog

[PIC32] T1 Asynchronous External Counter (Sleep mode & Wakeup)

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_T1_ASYNC_EXT_CLK.X오늘은 타이머 모드 분류에서 마지막에 해당하는 16-bit Asynchronous External Counter 를 테스트 해보도록 하겠습니다. 타이머 모드 분류1) 16/32-bit Synchronous Clock Counter PBCLK 를 Clock 소스로 사용시간 측정, Delay, 주기적인 타이머 인터럽트 발생 필요 시 사용2) 16/32-bit Synchronous External Clock Counter TxCK 핀으로 들어오는 Clock 을 소스로 사용외부 Clock 을 소스로 사용하는 경우 또는 외부 Clock 을 카운팅해야 하는 경우 사용3) 16/32-bit .......

Naver Blog

[PIC32] OC1 Single Compare Match

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다.https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_OC_SINGLE.X이번 글에서는 Output Compare Mode 중에서 Single Compare Match 모드에 대해서 정리해 보도록 하겠습니다. 우선 Output Compare 모듈을 살펴보면 타이머가 사용되며 타이머 값이 OCxR 과 OCxRS 레지스터 값과 비교되면서 OCM Mode Select 설정에 따라서 OCx 핀에 상태가 변화하는 것을 알 수가 있습니다.Reference 메뉴얼을 살펴보면 Output Compare 모드는 아래와 같이 3가지 모드로 동작하고 각각의 모드에서 output 형태의 차이에 따라서 동작이 나누어 집니다. 오늘은 첫번.......

Naver Blog

[PIC18F] MCC + UART Interrupt

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_MCC_UART_INT.X이번 글에서는 앞선 MCC 를 이용한 Polling 방식의 UART 모듈 테스트에 이어서 Interrupt 방식의 UART 테스트를 진행하여 보고자 합니다. MCC 를 구동후 아래와 같이 앞선 Polling 방식 설정과 동일하게 설정 후,Enable EUSART Interrupt 와 Redirect STDIO to USART 를 체크하여 줍니다. Receive Buffer Size 의 경우 저는 32바이트로 증가시켰습니다. Registers 탭으로 이동하여 Interrupt Enables 항목 중에서 Receive Interrupt 만을 체크하여 줍니다.이로서 UART 설정은 완.......

Naver Blog

[PIC18F] Watchdog

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_WATCHDOG.X원래 MCC 관련한 글을 더 써볼까 하다가 제 개인적인 생각으로는 MCC 를 이용한 장점을 느끼기 어렵다고 판단하여 Watchdog 을 끝으로 PIC18F 에 대한 정리는 마무리 할까 합니다. PIC18F 의 Watchdog 타이머 구조는 아래와 같습니다. WDTCON.SWDTEN 비트와 CONFIG2H.WDTEN 비트를 이용하여 Enable 제어를 할 수 있습니다. WDTEN 비트가 Disable 되어 있더라도 SWDTEN 비트로 Enable 시킬 수 있습니다. LFINTOSC 에서 클럭을 공급 받습니다. LFINTOSC 는 31kHz 로 동작하고 WDT 카.......

Naver Blog

[PIC32] PIC32 개발환경 구축

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. 2019년도 연말과 2020년도에 개인적으로는 크게 2가지 학습 방향을 잡고 있습니다. 첫번째는 Machine Learning 에 대한 공부를 해보는 것과 두번째는 PIC32 개발환경을 익히고 가능하다면 Harmony 까지 능숙하지는 않더라도 Manual 을 보면서 따라해 보는 것입니다. ML 에 대한 부분은 어느정도 이해도가 높아지면 정리해 볼 수 있도록 하고 당분간은 PIC32 를 학습하면서 내용을 정리해 둘까 싶습니다. PIC32 관련 첫번째 글이기 때문에 개발환경과 개발 보드에 대해서 우선 정리해 볼까 합니다. 1. 빌드 환경 구축- MPLAB X IDEhttps://www.microchip.......

Naver Blog

[ML] proxy 사용시 tensorflow, keras 설치

회사의 보안정책이 점점 강화되어가면서 SW 개발자들은 항상 고역입니다.자료를 보려고 검색해서 들어가면 차단에 라이브러리들은 다운로드 받기도 어렵습니다. ML 을 공부하면서 추후 이동이나 PC 교체 시에 설치부터 안되는 경험을 다시 할 것 같아 기록을 남겨 놓습니다. 1. PIP 업데이트를 위한 Proxy 설정2. PIP 업데이트3. Anaconda 설정 파일 생성 (C:\Users\[계정]\.condarc)4. condarc 파일에 proxy 및 ssl verify 무시 추가 후 저장5. Anaconda 환경 구성 및 활성화6. tensorflow 설치 7. keras 설치 (tensorflow 버전과 keras 버전 간 호환성이 존재하니 비슷한 시기에 release 된 것으로 매칭)

Naver Blog

[PIC32] GPIO Input + Output

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_GPIO_BASIC.XPIC32HMZ-144 보드에는 Reset 버튼, 입력버튼 한개, LED 한개가 달려있습니다. 버튼은 RB12, LED 는 RH2 핀을 사용합니다. 이번 글에서는 해당 주변장치를 이용해서 가장 기본이 되는 GPIO 입출력을 시험해 보고자 합니다.PIC32 Configuration 비트는 설정이 다양하고 Clock 과 같이 기본이 되는 동작에 영향을 주는 부분이 많기 떄문에 꼼꼼하게 확인해 볼 필요가 있어 보입니다. DEVCFG3 는 이더넷, Permission, Peripheral, USB 관련 설정 비트들이 존재합니다. GPIO 제어관련.......

Naver Blog

[PIC32] GPIO 7-Segment

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC32MZ_EXAMPLES/tree/master/PIC32MZ_GPIO_SEGMENT.X지난 글에 이어서 GPIO 를 이용한 Segment 제어를 정리해 보겠습니다. 사용한 보드는 지난 번과 동일하게 PIC32-HMZ144 보드를 사용하였습니다.세그먼트 모듈은 Open 아래와 같은 형태로 4개의 세그먼트를 제어할 수 있는 모듈입니다.세그먼트 제어를 위해서는 세그먼트 디스플레이용 8핀과 세그먼트 셀렉트용 4핀을 필요로 합니다.Olimex 보드에서 한개의 Port 에서 8개의 핀을 모두 사용할 수 있는 포트는 RJ 포트의 8~15번 포트가 가용하고 RK 포트도 이어서 4개의 포트가 연.......

Naver Blog

[PIC32] Clock 설정 & 성능 관련 설정#1

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. Reference : Programming 32-bit Microcontrollers in C written by Lucio Di Jasio이번글에서는 Clock 관련한 기본적인 설정 및 레지스터들에 대해서 정리하고 성능 개선을 위한 설정들을 알아보겠습니다. 우선 아래 그림을 보면 사용될 수 있는 Clock Source 들은 SPLL, POSC, FRCDIV, BFRC, LPRC, SOSC 가 있습니다. SPLL 은 System PLL 회로의 Divider 와 Multiplier 를 이용해서 원하는 클럭으로 증폭할 수 있습니다. PIC32MZ 의 최대 클럭은 200MHz 입니다. SPLL 의 소스로는 FRC 와 POSC 가 될 수 있습니다. 정밀한 동작이 필요한 경우에는 POSC 오.......

Naver Blog

[PIC18F] MCC + UART Polling

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_MCC_UART_POLLING.X이번 글에서는 MCC 를 이용해서 UART 를 Polling 방식으로 동작하는 테스트를 진행하여 보고자 합니다. 우선 MCC 를 구동한 후에 Device Resources 패널에서 EUSART 항목을 더블 Click 하면 Project Resources 항목에 EUSART 가 아래와 같이 추가 됩니다. 그리고, EUSART 패널을 보면 Easy setup 탭에서 중요한 설정은 모두 설정할 수 있고 세부 항목들은 Registers 탭에서 설정 가능합니다. 저는 UART 를 Polling 방식으로 구동하는 테스트를 진행하려고 하기 때문에 아.......

Naver Blog

[PIC18F] Internal EEPROM

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_EEPROM_BASIC.X이번글에서는 PIC18F 내장 EEPROM 의 입출력에 대해서 정리해 보도록 하겠습니다. 데이터 시트를 보시면 아래와 같이 모델별로 약간씩 EEPROM 의 크기가 상이합니다. 제가 사용하는 PIC18F45K20 은 256바이트의 공간을 제공하고 있습니다.만일 1024바이트의 EEPROM 을 사용한다면 주소처리가 EEADR 레지스터 하나로 처리할 수가 없고 EEADRH 레지스터를 함께 사용하여야 합니다.핵심 레지스터인 EECON1 레지스터는 아래와 같습니다. EEPGD: Flash 또는 EEPROM 메모리 Access 선.......

Naver Blog

[PIC18F] MCC + GPIO

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_MCC_GPIO.X이번 글부터는 몇차례에 걸쳐서 MCC(MPLAB Code Configurator) 를 이용하여 개발하는 방법을 알아보고자 합니다. MPLAB X IDE 를 설치한 후에 [Tools]-[Plugins] 메뉴를 열어보시면 Available Plugins 항목에서 MPLAB Code Configurator 항목을 확인하실 수 있습니다. 해당 항목을 설치하고 MPLAB 를 재시작 하면 아래와 같이 Installed 항목에 MCC 가 설치된 것을 확인할 수 있습니다. MCC 를 실행하기 위해서는 메뉴의 Tools - Embedded 메뉴를 이용하거나 아래처럼 MCC 아이콘.......

Naver Blog

[PIC18F] Comparator

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_COMP_BASIC.X이번 글에서는 PIC18F Comparator Module 에 대해서 정리해 보겠습니다. Comparator Module 은 아래 그림처럼 CxVin+ 핀과 CxVin- 핀 전압을 비교하여 특정 조건이 되면 CxOUT 핀의 상태가 변경 되도록 할 수 있습니다.CxPOL 설정값에 따라서 CxOUT 핀의 Polarity 를 변경할 수도 있습니다. 아래 그림은 Comparator1 의 개략적인 구조도입니다. C1Vin- 입력은 MUX 를 통해서 C12IN0- / C12IN1- / C12IN2- / C12IN3- 중 하나를 선택할 수 있습니다. C1Vin+ 입력은 MUX 를 통해서 C1I.......

Naver Blog

[PIC18F] I2C Master + BME280 library

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_I2C_BME280.X지난번 PCF8563 RTC 모듈에 이어서 한가지 더 I2C 동작 테스트를 진행해보고자 합니다. 사용할 모듈은 BME280 온도/습도/기압 센서입니다. BME280 에 대한 대략적인 설명은 기존 STM32 I2C 테스트 시에 이미 기술을 하였기 때문에 링크로 대신하겠습니다. BME280 센서의 드라이버 코드는 이미 아래와 같이 제조사에서 개발을 해 놓았기 때문에 사용하는 MCU 에 맞게 I2C 통신 부분만 변경하면 쉽게 개발이 가능합니다. 플랫폼에 맞게 추가 작성이 필요한 파일은 user_i2c_read, u.......

Naver Blog

[PIC18F] SPI Master + BD663474 LCD library

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_SPI_LCD_BD663474DatasheetReferences이번 글에서는 BD663474 LCD 라이브러리에 대해서 정리해 보도록 하겠습니다. 몇 달전에 ILI9341 라이브러리를 STM32 에서 정리한 적이 있는데 ILI9341 과 달리 BD663474 는 실제 많이 사용을 하지 않는지 참고할 만한 레퍼런스들이 많지 않은 상황이었습니다. 가장 기본이 되는 Clear 기능, Pixel / Line / Rectangle Drawing 코드만 새롭게 작성하고 나머지 코드들은 ILI9341 라이브러리를 그대로 이용하는 방식으로 개발하였습니다. 프로젝트 구성을 보면 아래와 같습니다. 위 코드.......

Naver Blog

[PIC18F] I2C Master + PCF8563 library

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_I2C_PCF8563.X지난번 SPI 마스터 모드 기능에 이어서 이번에는 I2C 마스터 모드 기능을 정리해 보고 Open18F4520 보드에서 제공하는 PCF8563 RTC 모듈을 연동해 보도록 하겠습니다. [ 배경지식 ]PIC18F 의 MSSP 모듈은 SPI 와 I2C 모드를 지원SSPADDR 레지스터는 Slave 동작 시에는 주소로 Master 동작 시에는 Clock 설정용으로 사용SSPCON1.WCOL 비트는 마스터 송신 모드에서 충돌발생 감지 flag (해제시 manual 하게 clear 필요)SSPCON1.SSPOV 비트는 마스터 수신 모드에서 Overflow 발생 f.......

Naver Blog

[PIC18F] SPI + AT45DB041E flash memory library

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_SPI_AT45DB041X.X이번 글에서는 AT45DB041E SPI Serial Flash Memory 모듈 드라이버를 정리해 보도록 하겠습니다. 제가 사용하는 Open18F4520 보드 패키지에는 SPI 통신 시험을 위해서 AT45DB041E 모듈이 함께 포함되어 있습니다. AT45DB041E 모듈의 데이터시트와 모듈 정보는 아래 링크에서 확인할 수 있습니다. [Datasheet]https://www.adestotech.com/wp-content/uploads/doc8783.pdf[Module]https://www.waveshare.com/at45dbxx-dataflash-board.htm주요사양은 아래와 같습니다. - 1.65~3.6V 전압을 사용하여 SPI .......

Naver Blog

[PIC18F] TIM2 + CCP2 Compare

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_CCP2_COMPARE.X[배경지식]Compare 모드는 TMR1 또는 TMR3 의 카운터 값이 CCPR2 레지스터와 일치할 때 인터럽트가 발생하며,이때 CCP2 핀의 상태가 변경됨 CCP2 핀의 상태는 CCP2.CCP2<모드 설정에 따라서 low to high, high to low, toggle, unchanged 설정가능CCP2 핀은 TRIS 핀을 이용해서 Output 으로 설정해 놓아야 함Special Event Trigger 기능을 사용하면 Compare match 시에 타이머를 reset 하거나 ADC 동작을 수행하도록 할 수 있음.아래 블록 다이어그램을 보면 앞서 설명한 대.......

Naver Blog

[PIC18F] TIM2 + ECCP PWM

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_CCP1_PWM.X[배경지식]CCP1 은 ECCP(Enhanced CCP) 모듈이라고 불리운다.기본적으로 CCP2 의 Standard CCP 기능에 발전된 PWM 기능을 포함하고 있다. Standard CCP 의 PWM 기능을 기본적으로 지원하고 그 외 4개 Output 채널 지원, Programmable Polarity, Dead band 제어, Automatic shutdown & restart 등의 기능을 추가적으로 지원한다.CCP1CON.P1M 비트 설정을 통해서 4가지의 Enhanced PWM 모드 설정이 가능한다. - Single PWM- Half-Bridge PWM- Full-Bridge PWM, Forward mode- Ful.......

Naver Blog

[PIC18F] UART Polling

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_UART_POLLING.X[ 배경지식 ]PIC18F의 EUSART 모듈은 아래 3개의 레지스터 사용- TXSTA (Transmit Status & Control)- RCSTA (Receive Status & Control)- BAUDCON (Baudrate Control)RX, TX 핀의 TRIS 비트는 '1'로 설정되어야 함TX 관련 레지스터 - GIE, PEIE, TXIF, TXIE, TXIP: 인터럽트 관련 비트- SPEN (Serial Port Enable) : UART 기능 Enable- TXREG: 송신 데이터 버퍼- TX9: 9비트 전송 Enable- TXEN: 전송기능 Enable- SYNC: 동기/비동기 모드 설정- SENDB (Send.......

Naver Blog

[PIC18F] UART Interrupt + Ring Buffer

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_UART_INT.XReference- Ring buffer library https://github.com/AndersKaloer/Ring-Buffer[예제]Interrupt 방식으로 UART 데이터를 수신하여 Buffer에 저장하고 CRLF 문자를 수신하면 Buffer 담겨있던 데이터를 빼내어 Echo 한다. 지난번 글은 Polling 방식으로 UART 데이터를 송수신 하였다면 이번 예제는 Interrupt 방식으로 데이터를 처리하는 예제입니다. Polling 방식은 구현이 Simple 한 장점이 있지만 Polling 하는 동안 다른 task 를 처리할 수 없기 때문에 대부분의 통신 주기가 일.......

Naver Blog

[PIC18F] PWM + Buzzer

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_TIM1_BUZZER.X[ 배경 지식 ]오늘은 PWM 을 이용해서 Open18f4520 보드에 있는 Buzzer 에서 간단한 음악을 출력해 보겠습니다. 보통 원하는 음을 출력하기 위해서는 아래 테이블을 참고합니다. 테이블을 잘 보시면 옥타브가 올라갈 때 주파수도 2배씩 증가하는 것을 확인할 수 있습니다. 예를 들어서, 5옥타브의 도를 부저로 출력하기 위해서는 약 523Hz 의 PWM 을 생성하여 주면 됩니다. 보통 주파수는 음을 결정하는데 사용하고 Duty 는 출력의 크기 즉, 볼륨을 설정할 수 있습니다. 가장 중.......

Naver Blog

[PIC18F] SPI + 25LC010A EEPROM

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_SPI_25LC010A.X[배경지식]SPI 에 관련한 기본지식은 개발서적이나 인터넷 등 다양한 경로로 자료를 확보가 가능하고, 이미 알고 계시는 분들이 대부분일 것이라고 생각하여서 이 글에서는 SPI 자체에 대한 내용은 생략하고 제가 PIC 을 정리하면서 좋은 자료를 확인한 사이트를 참고로 링크하여 봅니다. https://deepbluembedded.com/spi-tutorial-with-pic-microcontrollers/MSSP (Master Synchronous Serial Port) 모듈은 SPI 와 I2C 통신을 지원SPI 모드 관련 핀은 SDO, SDI, SCK, SSSPI 모.......

Naver Blog

[PIC18F] TIMER2

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_TIM2_BASIC.X[ 배경 지식 ]8비트 타이머1/4/16 Prescaler 사용가능 (T2CON.T2CKPS)1~16 Postscaler 사용가능 (T2CON.T2OUTPS)TMR2와 PR2 가 일치할 때, TMR2 는 0 으로 ResetTMR2 와 PR2 레지스터 값이 일치하는 경우 Postscaler 에 카운터가 증가하고 Scaler 값만큼 카운트 증가 시 인터럽트 발생 (PIR1.TMR2IF)T2CON 레지스터를 이용하여 제어 타이머 클럭은 Fosc/4 공급TIMER2 블럭을 보면 아래와 깉이 TMR2 레지스터 앞 뒤로 Prescaler 와 Postscaler 가 사용됨Postscaler 카운터가 설정.......

Naver Blog

[PIC18F] TIM2 + CCP2 PWM

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_CCP2_PWM.X[배경지식]CCP 모듈은 Capture / Compare / PWM 기능을 제공PWM 기능을 강화한 모듈은 Enhanced CCP 라고 함CCP1 은 Enhanced CCP 기능을 제공하고 CCP2 는 Standard CCP 기능을 제공Capture / Compare / PWM 기능은 동시에 사용 불가하며 한개의 기능만 선택 가능 (CCP2CON.CCP2M)TIMER1/3 는 Capture, Compare 기능에 사용 가능하고 TIMER2 는 PWM 기능에 사용 가능두 개의 CCP 모듈은 동시에 한개의 TIMER 리소스를 같이 사용할 수도 있음CCP2 핀은 기본적으로 RC1 핀에 할당되며.......

Naver Blog

[PIC18F] TIM2 + CCP2 Capture

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_CCP2_CAPTURE.X[배경지식]CCP2 핀에 Capture 이벤트 발생시 TMR1, TMR3 값이 CCPR2H:CCPR2L 레지스터에 저장됨falling / rising / 4th rising / 16 rising edge 선택 가능 (Prescaler 설정)CCP2CON.CCP2M 비트 설정으로 Capture 모드 선택 가능TIMER1/3 는 Capture, Compare 기능에 사용 가능하고 TIMER2 는 PWM 기능에 사용 가능두 개의 CCP 모듈은 동시에 한개의 TIMER 리소스를 같이 사용할 수도 있음Capture 모드 사용시 CCP2 핀은 TRIS 레지스터 설정에서 Input 핀으로 설정Counter 모드로.......

Naver Blog

[PIC18F] TIMER1 / TIMER3

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_TIM1_BASIC.X[ 배경 지식 ]16비트 타이머 또는 카운터 모드 동작 가능Internal or External 클럭 소스로 동작Overflow 인터럽트 동작타이머1의 오실레이터는 MCU 의 Low Power Clock 소스로도 사용 가능타이머1에 32.768kHz Clock 을 사용하여 RTC 기능으로도 사용 가능타이머 모드는 TMR1CS 비트로 설정 TMR1CS = 0 로 설정 시, Fosc / 4 의 Clock 소스 공급TMR1CS = 1 로 설정 시, External clock 또는 Timer1 오실레이터에서 Clock 소스 공급Prescaler 는 T1CKPS 비트를 이용해.......

Naver Blog

[PIC18F] ADC

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_ADC_BASIC.X오늘은 ADC 동작에 대해서 정리해 보도록 하겠습니다. Open18F4520 보드는 ADC 관련 기능을 시험해 볼 수 있도록 하래와 같이 20핀 헤더 중에서 RA0 핀에 AD Keypad 라는 확장보드를 연결할 수 있도록 되어 있습니다. 확장보드는 특별한 것이 아니고 버튼 별로 저항값이 달라서 해당 저항 값의 변화에 따라서 RA0 핀에 걸리는 전압이 변경되는 동작을 수행합니다. RA0 핀에 걸리는 전압이 변경되면 결국 계측되는 ADC 값도 그에 맞게 변경될 것입니다. [ 배경 지식 ]우선 기본.......

Naver Blog

[PIC18F] External Interrupt / Interrupt On Change

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_INT_EXTERNAL.XPIC18F 의 HW 인터럽트는, 1) 타이머, USART, ADC, CCP, SPI, I2C, EEPROM 과 같은 내부 Peripheral 인터럽트2) External Interrupt, Interrupt on Change 인터럽트와 같은 외부 인터럽트가 있습니다. 내부 Peripheral 들의 인터럽트는 해당 기능을 설명할 때 설명을 드리고 이번 글에서는 External Interrupt 와 Interrupt on Change 에 대해서 정리해 보도록 하겠습니다.[ 배경 지식 ]External Interrupt 와 Interrupt On Change 는 RB포트의 핀들을 이용합니다.External I.......

Naver Blog

[PIC18F] TIMER0

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/PIC18F_TIM0_BASIC.X[ 배경 지식 ]Timer0 는 8비트 또는 16비트 모드로 동작가능8비트 Prescaler 사용가능Internal or External clock 소스 선택가능External clock source 의 edge 선택가능 (rising or falling)Overflow 인터럽트Timer0 는 타이머 또는 카운터로 사용 가능 (T0CS 비트)타이머 모드에서는 내부 Clock 사용 (T0CS = 0)카운터 모드는 T0CKI 핀의 Clock 사용 (T0CS=1) 하며 선택한 edge(falling or rising) 마다 카운터 증가16비트 모드로 동작 시에는 TMR0H 는 버퍼와 같이 사.......

Naver Blog

[PIC18F] GPIO + LED

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/LED.XOpen18F4520 보드의 Schematic 을 보면 아래 그림과 같이 8개의 LED 가 RB 포트에 연결되어 있습니다. [ 배경 지식 ]GPIO 제어를 위해서 PORTB 포트의 데이터시트를 확인해 보겠습니다. TRISB 레지스터는 Input / Output 설정을 위해서 사용합니다. PORTB 레지스터는 핀의 레벨을 읽기 위해서 사용합니다. LATB 레지스터는 Output 출력을 제어하기 위해서 사용합니다. PORTB 핀들은 GPIO / KBI (Interrupt-on-change) / Analog Input 등으로 사용될 수 있습니다. POR 시에 Default 값은 Analog .......

Naver Blog

[PIC18F] GPIO + Switch + LED

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/ReadSwitch.X앞선 글에서 LED 를 이용하여 GPIO Output 을 시험하였다면 이번 글에서는 조이스틱과 버튼을 이용하여 GPIO Input 기능을 확인하여 보겠습니다. Open18F4520 보드의 조이스틱과 버튼 회로는 아래와 같습니다. RD0 ~ RD7 핀에 연결되어 있고 모두 Pull-up 되어 있습니다. 예제는 PORTD 핀에 입력이 있는 경우, 앞서 시험해 보았던 PORTB 포트에 연결되어 있는 LED 를 점멸하는 방식으로 만들어 보고자 합니다. (※ RD2 와 RB2 제외)TRISD 레지스터는 POR 시 Input 으로 설정되지만 명확.......

Naver Blog

[PIC18F] GPIO + 7-Segment

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/PIC18F_Examples/tree/master/7_Segment.XOpen18F4520 보드 패키지는 여러가지 테스트 할 수 있는 제품을 제공하는데 그중 하나가 7-Segment(8-Segment?) 입니다. 총 4개의 숫자 + ':' + '.' 을 표시할 수 있습니다. Schematic 에는 제대로 표시가 되어 있지 않지만 Segment 는 Common Anode 타입 제품이며, PORTA 핀들은 표시할 숫자 위치 선택을 위해서 사용되며, PORTB 핀들은 Segment 의 숫자값을 표시하기 위해서 사용됩니다. 우선 비스한 4개의 숫자를 표시할 수 있는 Common Anode 타입의 Schematic.......

Naver Blog

[PIC18F] HD44780 CLCD

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. Reference : https://embed-avr.tistory.com/52?category=671114지난번 Segment 에 이어서 이번에는 HD44780 CLCD 를 연결해 보고자 합니다. 앞으로 개발하는 과정에서 어떤 상태를 확인하려면 UART 나 디스플레이 장치가 필요한데 가장 손쉽게(???) 연동할 수 있는 디스플레이 장치 중 하나가 CLCD 장치가 아닐까 싶습니다. 위에서 손쉽게라고 적어 놓기는 하였으나 사실 데이터시트를 모두 읽고 처음부터 모두 구현하려면 쉽지 않겠죠?하지만 CLCD는 매우 많이 사용되는 디바이스이기 때문에 그 많큼 방대하고 잘 정리되어 있는 자료들이 많이 있습.......

Naver Blog

[PIC18F] Open18F4520 보드

ATMEGA128A/328P 관련 내용을 한번 공부하고 나서 1년 가까지 지나고 나니 머리 속에 남은 것이 거의 없습니다. 그래서 올해에는 PIC18F 를 시간 나는 때마다 공부해보고 잊어보려고 합니다. ^^"개발용 보드는 Waveshare 의 Open18F4520 보드입니다.보드를 구매하였으니 한번 어떤 것들이 있는지 살펴보아야겠습니다.GPIO, TIMER, ADC, LCD, PWM, IR, SPI, I2C, UART, PS2 등의 실험을 해 볼 수 있을 것 같습니다. 개발에 사용할 환경은 다음과 같습니다. - MPLAB X IDE 5.2버전- XC8 Compiler- ICD4 - ICD-ICSP 핀 컨버터데이터 시트에 있는 PIC18F4520 의 사양 및 Pinout 은 다음과 같습니다. - 8bit RISC- 동작주파수는 최대 40MHz.......

Naver Blog

[PIC18F] 개발 환경 구축

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. 오늘은 우선 개발환경 구축에 필요한 항목들을 정리해 보도록 하겠습니다. 개발에 필요한 항목들은 아래와 같습니다. 1) MPLAB X IDE 2) XC8 Compiler3) MPLAB Code Configurator (GUI 기반 설정 도구)4) 디버거 (PICkit or ICD)5) 악세사리1) MPLAB X IDE 5.20버전https://www.microchip.com/mplab/mplab-x-ide운영체제에 맞는 버전을 다운로드 받아서 설치합니다.2) XC8 Compiler 2.05 버전https://www.microchip.com/mplab/compilers운영체제에 맞는 버전을 다운로드 받아 설치합니다.3) MPLAB Code ConfiguratorMPLAB X IDE 를 실행 후, Tools - Plug.......

Naver Blog

[PIC18F] Clock 설정

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. 오늘은 지난 번 개발 환경 구축에 이어서 Clock 설정과 관련한 내용을 정리해 보고자 합니다. 모든 MCU 는 동작을 위해서 Clock Source 가 필요하고 Clock 에 문제가 있다면 정상적인 동작을 보장할 수 없기 때문에 우선 Clock 관련한 부분부터 학습해 보고자 합니다.※ 개발 보드를 구매하였을 때, PIC18F4520 MCU 를 사용하는 보드여서 해당 MCU 를 사용하려다가 Code Configurator 에서 지원을 하지 않아 Pin-to-Pin 이 되는 PIC18F45K20 으로 MCU 를 변경하였습니다. 거의 대부분의 기능은 동일하고 다만 Vdd 가 5V 가 아닌 3.3V 를 사용하고 Max 클럭.......

Naver Blog

[STM32 HAL] USB Mass Storage

https://github.com/eziya/STM32F4_HAL_EXAMPLES/tree/master/STM32F4_HAL_USB_STORAGE[ GPT 파티션 동작 오류 ]2017년도에 USB Mass Storage 관련하여 작성했던 글이 하나 있습니다. 근래에 동작에 문제가 있다는 댓글이 있어서 기억을 더듬어 볼겸해서 프로젝트를 다시 만들어 보았습니다.우선 댓글에 있던 내용은 8G USB 드라이브는 잘 동작하는데 16G 드라이브는 동작하지 않는 이슈였습니다. 그래서 저도 제가 가진 드라이브를 꺼내서 테스트를 해보니 4개 중 한 개가 동작하지 않았습니다. 다시 포맷을 해도 마찮가지로 동작을 하지 않아서 Debugging 을 해보니 아래와 같은 차이점이 있었습니다. 우선 첫번째 그림은 동작을 잘하는.......

Naver Blog

[STM32 HAL] VS1053 MP3 Module#1

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. References :https://www.sparkfun.com/datasheets/Components/SMD/vs1053.pdfhttp://www.toughdev.com/content/2013/10/interfacing-vs1053-audio-encoderdecoder-module-with-pic-using-spi/https://github.com/adafruit/Adafruit_VS1053_Library https://github.com/MikroElektronika/MP3_click/오늘은 몇 주전에 Arduino 를 이용해서 기본적인 기능을 테스트 해보았던 VS1053 모듈을 STM32 에서 연동해 보고자 합니다. VS1053 모듈은 MP3, WMA, OGG 등을 재생할 수 있는 미디어 모듈입니다. Adafruit 의 Music Maker 또는 LC Soft 모듈 등을 구매하셔서.......

Naver Blog

[STM32 HAL] VS1053 MP3 Module#2

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/STM32_HAL_VS1053References :https://www.sparkfun.com/datasheets/Components/SMD/vs1053.pdfhttp://www.toughdev.com/content/2013/10/interfacing-vs1053-audio-encoderdecoder-module-with-pic-using-spi/https://github.com/adafruit/Adafruit_VS1053_Libraryhttps://github.com/MikroElektronika/MP3_click/[ 이전글 ]오늘은 지난번에 정리한 시퀀스들이 코드로 어떻게 구성되어 있는지 정리해보도록 하겠습니다. 우선 CubeMx 를 실행하고 하기와 같이 PIN 을 설정하여 줍니다. Clock, UART2, SPI2, SPI3, LED 그리고 XD.......

Naver Blog

[STM32 HAL] VS1053 MP3 Module#3 FLAC 파일 재생

※ 내용에 오류가 있을 수 있습니다. 오류에 대해서는 Feedback 부탁 드리겠습니다. https://github.com/eziya/STM32_HAL_VS1053References :https://www.sparkfun.com/datasheets/Components/SMD/vs1053.pdfhttp://www.toughdev.com/content/2013/10/interfacing-vs1053-audio-encoderdecoder-module-with-pic-using-spi/https://github.com/adafruit/Adafruit_VS1053_Libraryhttps://github.com/MikroElektronika/MP3_click/[ 이전글 ]마지막으로 FLAC 재생에 대해서 정리해 보겠습니다. FLAC 재생이라고 특별히 많은 변화가 있는 것은 아니고 VS1053 의 Plugin 기능을 이용해서 FLAC 재생을 위한 FW 를 업로드 하고 파일을 재생시켜 주면.......

Naver Blog

[STM32 HAL] TrueStudio 에서 SWV(Serial Wire Viewer) 를 이용한 printf debugging

Reference : Atollic tools1) Debugger 설정에서 SWD 를 선택하여 줍니다.2) Trace 상목에서 SWV 를 선택하고 시스템 Clock 값을 설정하여 줍니다.3) 아래와 같이 syscall.c 파일을 소스 폴더에 추가하여 줍니다.4) 아래와 같이 추가된 syscalls.c 파일을 수정하여 줍니다.printf 함수 호출 시 ITM_SendChar 를 통해 SWV 로 메시지가 출력되도록 합니다.5) Debugging 을 실행하면 SWV 콜솔이 표시됩니다. 이 때 설정 버튼을 클릭합니다. 6) ITM 활성 포트에서 TIM0 채널을 활성화하여 줍니다.7) 이제 설정이 완료되었고, Start Trace 버튼을 클릭하여 줍니다. 8) Debugging 을 실행합니다. 아래와 같이 printf 코드가 있는 경우 SWV 콜솔에 메시.......

Naver Blog

[STM32 HAL] Power Save Mode (Sleep, Stop, Standby)

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경지식 ]STM32F 시리즈는 Sleep, Stop, Standby 3가지의 절전모드를 지원한다.절전을 많이 하는 모드일수록 Wake-up에 오랜 시간이 걸린다.주변장치가 많을수록, Clock 이 빠를수록 에너지 소비는 높기 때문에 불필요한 주변장치를 Disable 하고 필요한 최적의 Clock으로 동작 시키면 에너지 효율성은 좋아진다.절전모드 Entry 동작은 ARM에서 제공하는 WFI, WFE Instruction으로 동작한다.WFI (Wait For Interrupt)는 조건 없는 Sleep Instruction으로 수행하며, 수행 즉시 Core 실행을 중지 시킨다. 다만 Pending 인터럽트가 있다면 Sleep 모드.......

Naver Blog

[STM32 HAL] Flash Management + UART IAP 예제

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경지식 ]STM32 시리즈는 모델명에 따라서 Flash 사이즈 확인가능 (e.g. E: 512kB, G: 1024kB)1뱅크 또는 2뱅크 모델 존재하며, 2뱅크 모델은 동시에 사용될 수 있어 고성능 모델에 채용됨.뱅크는 섹터로 나누어짐. 모델에 따라서 섹터의 크기가 동일하거나 다를 수 있음.섹터는 페이지로 나누어짐. 모델에 따라서 페이지를 지원하는 모델이 있고 지원하지 않는 모델이 있음.Information Block 에는 Option Bytes 를 기록하거나 OTP 라고 불리우는 비휘발성 영역이 있음.기본적으로 STM32는 시스템 재시작 시에 Flash 영역의 Write Protection.......

Naver Blog

[ESP32] EPS32 + VS1053 Adafruit Library

https://github.com/eziya/ESP32_ADAFRUIT_VS1053한동안 STM32 에 관련한 글만 정리하다 보니 조금 지루한 느낌이 있어서 예전에 사 놓고 서랍속에 고이 모셔 두었던 VS1053 모듈을 테스트 해 보았습니다. 사실 글을 쓰고 있긴 하지만 VS1053 모듈에 대해서는 세부적으로 공부를 하지는 못하였고 추후 STM32 용 라이브러리 개발에 앞서 Adafruit Library 를 이용해서 Arduino 기반의 Prototype 을 만들어 보았습니다. 처음에 저는 Adafruit 라이브러리를 사용하면 1시간 이내에 테스트가 완료될 것이라고 생각하였는데 Adafruit Library 가 ESP32 에서 완벽하게 동작하지 못하는 관계로 몇 시간을 문제 해결을 위해서 고생해야 했습니다. .......

Naver Blog

[STM32 HAL] ILI9341 TFT LCD Library

오늘은 ILI9341 TFT LCD 라이브러리 관련한 내용을 정리해 보고자 합니다. 우선 STM32 용 HAL 드라이버를 사용한 ILI9341 라이브러리는 Github 를 찾아보시면 몇 가지가 이미 존재하고 있습니다. 저는 그 중에서 아래 라이브러리를 기반으로 작업을 해 보았습니다. 제가 작성한 대부분의 코드는 아래 martnak 이 제작한 라이브러리와 거의 유사합니다. https://github.com/martnak/STM32-ILI9341제가 위 라이브러리에서 가장 큰 변경점은 폰트 관련 기능입니다. 수정 전 라이브러리는 폰트 1종에 사이즈도 5x5 폰트로 고정에 되어 있습니다. 큰 폰트가 필요할 경우에는 5x5 폰트를 그대로 Scale up 사용 하다보니 큰 글자를 출력 시 글꼴이 깔.......

Naver Blog

[STM32 HAL] IWDG + WWDG Watchdog

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경 지식 ]STM32 는 2가지 종류의 watchdog 타이머를 제공- IWDG(Independent Watchdog), WWDG(Window Watchdog)IWDG 는 LSI 로부터 clock 을 제공받는 12-bit down counter 타이머로서 HSI/HSE clock 에 문제가 발생하여도 독립적으로 동작할 수 있다. STM32F0/F3/F7/L0/L4 시리즈는 windowed 모드로 동작할 수 있다. (STM32F4 는 미지원)IWDG 는 아래 공식에 따라서 Reset 타이밍이 결정된다. 예를 들어서 LSI 는 32kHz, Prescaler 는 2, 그리고 Period 값이 0xFFF 라고 할 때(2^2) * 4096 / 32000 = 0.512 sec 로 계산될 수 있다. 일단.......

Naver Blog

[STM32 HAL] Meta 정보 포함하기

근래에 고객으로 부터 Meta 정보를 포함하여 Firmware 를 빌드하여 달라는 요청을 받았습니다. Meta 정보는 다들 한번 쯤은 들어보셨겠지만 어떤 파일의 용도를 기술하는 정보입니다. 파일에 Meta 정보가 앞부분에 들어있으면 해당 Meta 정보를 먼저 읽어서 다음 데이터 부분을 읽는데 사용하는 방식 등으로 사용됩니다. Firmware 에서 메타정보에는 버전이나 Firmware 가 사용될 수 있는 하드웨어 정보 등을 포함할 수 있을 것 같습니다. 오늘은 Meta 정보를 포함하는 방법에 대해서 정리해보고자 합니다. 저는 평소 회사에서는 IAR 를 사용하고 있지만 요즘 정리하고 있는 HAL 예제에서는 Freeware 인 Truestudio 를 사용하고 있기 때문.......

Naver Blog

[STM32 HAL] RTC

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경 지식 ]STM32 시리즈는 내장 RTC 제공시간/날짜, Anti tampering, 알람, Low 파워 모드에서 Wakeup 등의 기능 제공BCD 방식으로 시간정보 관리 년 / 월 / 일 / 요일 / 시(12H or 24H) / 분 / 초 / 0.1초 정보 제공자동 윤년 적용 Daylight Saving 기능 적용은 Programmable 함RTC 에 공급할 수 있는 Clock 소스는 HSE / LSE / LSI 3가지 종류가 될 수 있음온도가 변화하는 환경에서 높은 정확도 요구시, LSE 사용 권장알람 기능은 Alarm A / Alarm B 두 가지를 제공. Alarm 은 Masking 기능을 이용하여 원하는 Alarm 조건으로 다양하게 설정 가.......

Naver Blog

[STM32 HAL] CRC (Cyclic Redundancy Check) + Flash Integrity Check + SRecord

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경 지식 ]우선 CRC 에 대한 이해를 위해서는 wiki 자료를 한번 읽어보시는 것을 추천 드립니다. CRC 는 Parity bit 나 Checksum 처럼 데이터의 integrity 를 체크하는 용도로 사용될 수 있습니다. Parity의 취약점은 2비트가 동시에 변경되면 감지를 못하고, Checksum 은 두 값이 +1 / -1 로 바뀐다면 감지를 하지 못하는 단점이 있습니다. 예전에 CRC 에 대해사 처음 이야기를 들었을 때는 다항식 이나 나눗셈이니 하는 부분이 잘 이해가 되지 않았습니다. 제 나름대로 이해한 내용으로 설명을 드리려고 하는데 아마 잘못 이해하고 있는 부.......

Naver Blog

[STM32 HAL] SPI#Protocol + SSD1306 OLED + u8g2 library

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **Mastering STM32 교재에 아쉽게도 다양한 SPI 예제들이 없다보니 제 개인적으로 몇가지 선정하여 SPI 예제를 진행하였습니다. 오늘은 마지막 예제인 SSD1306 OLED 입니다. SSD1306 OLED 는 저렴한 가격에 구매할 수 있는 디스플레이 장치로 널리 쓰이는 만큼 다양한 라이브러리들이 이미 만들어져 있습니다. 그중에서는 제가 좋아하는 2가지 라이브러리 중 하나인 u8g2 라이브러리를 Porting 하는 내용으로 정리해 보고자 합니다. u8g2 라이브러리는 olikraus 에 의해서 Github 에서 배포되고 있는 라이브러리로 SSD1306 외에도 수십종의 OLED .......

Naver Blog

[STM32 HAL] SPI#Protocol + MAX7219

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **이번 글에서는 지난번에 이어서 SPI 두번째 예제인 MAX7219 를 이용한 Matrix 제어입니다. 사실 MAX7219 는 AVR 의 SPI 예제를 만들어 볼 때 한번 다루어 보았던 예제입니다. 대부분의 소스는 이전에 만들었던 AVR 예제를 그대로 사용하고 일부 SPI 관련 함수만 STM32 에 맞게 수정하였습니다. MAX7219 의 동작에 대해서는 앞선 글에서 정리하였기 때문에 이번 글에서는 MAX7219 자체에 대한 글은 생략하고 AVR 코드를 STM32 에 맞도록 수정한 부분만 언급하도록 하겠습니다. CubeMx 에서 아래와 같이 프로젝트를 생성하고 SPI2 를 활성화 시켜줍니.......

Naver Blog

[STM32 HAL] SPI#Protocol + 25LC010A

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경지식 ]SPI 는 70년대 Motorola 에 의해서 정의된 표준으로 I2C 와 더불어 아직도 널리 쓰이고 있다. SPI 버스는 4개의 시그널로 구성된다. (SCK, MOSI, MISO, SSn)SCK 는 데이터 전송 시 동기화에 사용된다.MOSI 는 Master Output Slave Input 의 약어로서 Master 에서 Slave 로 데이터 전달에 사용된다.MISO 는 Master Input Slave Output 의 약어로 Slave 에서 Master 로 데이터 전달에 사용된다.SSn 은 Slave Select 의 약어로 SPI 는 I2C 와 달리 Device 별로 Address 를 사용하지 않고 Select 신호를 사용한다. Full Duplex 동작 시에는.......

Naver Blog

[STM32 HAL] I2C#Protocol + DS3231 RTC

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **I2C 관련하여 지난 글에서 정리를 하려고 하였는데 예전에 구매하여 놓고 제대로 테스트를 해보지 않은 DS3231 RTC 가 있는 것이 기억나서 추가로 DS3231 라이브러리를 제작해 보았습니다. DS3231 은 기본적으로 RTC 시간정보를 제공하는 것 이외에도 알람이나 Square Wave 출력 같은 기능들을 제공하고 이를 세부적으로 제어할 수 있습니다. 저는 여러가지 기능 중에서 핵심이 되는 기능 4가지를 지원하는 라이브러리를 만들어 보았습니다. 1) RTC 정보 Set / Get2) Temperature 정보 / Get 3) Alarm#1 Set / Clear4) Register Read / Write그럼.......

Naver Blog

[STM32 HAL] I2C#Protocol + HD44780 CLCD

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경지식 ]I2C 는 UART, SPI 통신과 함께 널리 쓰이고 있는 통신 프로토콜 중 하나이다.1982년 NXT 전신인 Philips 에 의해서 개발 됨.Multi Slave 지원, Half-Duplex, Two-wires 통신의 특성을 지님.기본적인 I2C 버스 구성은 아래와 같으며 Pull-up 저항 값은 Bus 의 Capacity 와 통신 속도에 의해서 결정 되며, 일반적으로는 4.7K Ohm 저항을 사용 정확한 저항값 계산은 링크를 참조: http://www.ti.com/lit/an/slva689/slva689.pdfSDA 는 데이터 전송 목적으로 사용되며 SCL 은 Clock 전송용으로 사용됨.STM32 내부 Pull-up 을 사용할 수 있.......

Naver Blog

[STM32 HAL] I2C#Protocol + BME280

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **지난 번 I2C 방식을 이용한 HD44780 CLCD 예제에 이어서 BME280 환경센서 예제를 설명드려보고자 합니다. BME280 은 온도, 습도, 기압 데이터를 한번에 계측 할 수 있는 매우 유용한 센서입니다. 측정가능한 스펙은 아래와 같습니다. 온습도 측정 범위도 넓고, I2C 방식을 사용하여 손쉽게 데이터를 취득할 수 있기 때문에 지난 번 ADC 에서 사용한 LM35DZ 보다 회로 구성을 간단하게 하면서 영하/영상 폭넓은 온도를 측정할 수 있고 DS-18B20 과 같이 1-Wire 를 사용하는 센서보다 손쉽게 구현이 가능한 점이 장점인 것 같습니다. 물론 비용적인 측.......

Naver Blog

[STM32 HAL] DAC#Sine Wave + Triangle Wave

Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[ 배경지식 ]DAC 는 ADC 동작의 역으로 이해할 수 있습니다. Digital 값을 Analog 전압으로 바꾸어서 출력해 줍니다. 위 그림은 8bit R-2R Ladder DAC 의 구조를 단순화하여 보여준 그림으로 입력되는 DAC 값에 따라서 R-2R 회로의 스위치가 제어 되면서 제어하고자 하는 값으로 출력하게 됩니다. 예를 들어서 8bit DAC 에서 0x00 = 0V, 0x80 = 1.65V, 0xFF = 3.3V 로 출력됩니다.R-2R Ladder 의 동작은 아래 그림과 같습니다.[ 예제 ]1) HAL_DAC_SetValue 를 이용해서 50Hz 싸인파를 만들어 본다.2) 타이머와 DMA 방식으로 50H.......

1 2 3 4 5 6