초보의 아웅다웅 설계하기 335

nRF5 Uart 사용하기(without FIFO)

nRF5 예제의 FIFO 구조로 되어 있는 UART를 FIFO를 사용하지 않고 설정해 사용하려고 하였습니다. 그런데 믕? 사용은 되는데 app_uart_put 함수가 한바이트씩 밖에 동작하지 않습니다. 구글링 해보니 코드들을 조금 손대줘야 하나봅니다.(기존 예제를 사용하지 않으려고 하는 이유는 데이터를 계속 뿌리니 중간중간 데이터가 깨져서 연속으로 데이터를 계속 전송하는 경우 문제가 생겨서 입니다.) 일단 아쉬운대로 app_uart_put파일을 고쳐서 데이터만 확인하였습니다.(문제 여지가 있어 보이지만 임시로 썼습니다.) APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_error_handle, APP_IRQ_PRIORIT..

GPIO로 딜레이를 사용하여 Uart TX 출력 - Soft Uart

작번에는 GPIO와 타이머를 사용하여 Uart TX를 출력하였지만 타이머 패리패럴을 사용하지 못하는 경우가 있었습니다. 그래서 딜레이를 사용하여 Uart TX 출력을 만들었습니다. 8Bit 마이컴때는 어셈으로 TX, RX를 만들어서 사용하는 경우도 제법있었는데 요즘은 메모리가 많이 커져서 그런 경우가 없었던 것 같습니다. 딜레이 함수는 맞춰서 값을 변경해주면 되는데 최적화되면서 값이 자꾸 바뀔 수 있어서 그 부분을 잘 확인하여야 합니다.(STM으로 카테고리를 정했지만 사실 Core는 Arm Core 가 아닙니다.) #include "gpio.h" #define SU_TRUE 1 #define SU_FALSE 0 // 1 Startbit, 8 Databits, 1 Stopbit = 10 Bits/Frame..

STM32L496 Unique ID 확인하기

Unique ID는 시리즈마다 다른 위치에 있습니다. 선언되지 않았다면 Referance Manual 에서 주소를 확인하고 사용하여야 합니다. /*===============stm32l496xx.h에 선언된 부분 ==================*/ #define PACKAGE_BASE ((uint32_t)0x1FFF7500U) #define UID_BASE ((uint32_t)0x1FFF7590U) #define FLASHSIZE_BASE ((uint32_t)0x1FFF75E0U) /* Debug MCU registers base address */ #define DBGMCU_BASE ((uint32_t)0xE0042000U) #define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_..

SW6STM에서 고정위치에 바이너리 라이팅하기

고정할 바이너리 파일 unsigned char _FixedData[1024UL + 1] __attribute__ ((section(".mfc_array"))) = { 0x8D, 0x43, 0xF2, 0x3D, 0x71, 0x3F, 0xF8, 0x12, 0x5D, 0x85, 0x96, 0x9F, 0x2A, 0x52, 0xE7, 0x50, 0xB4, 0x43, 0xDE, 0xE6, 0xBB, 0xC8, 0x6A, 0xC1, 0xD4, 0xBD, 0x83, 0xE6, 0x13, 0xAF, 0x5B, 0xE0, 0x06, 0x4B, 0x07, 0x4A, 0x1B, 0x68, 0x93, 0x42, .... 중략 .... }; STM32Fxxxx_FLASH.ld 파일 /* Entry Point */ ENTRY(Re..

Keil에서 함수를 RAM상에 올려서 사용하기

Flash 메모리의 접근 속도가 느릴 경우 자주 쓰는 함수들을 RAM에 올려놓고 쓰는 것이 속도에 대한 방안이 될 수 있을 것 같습니다.(실제로 해보지는 않았습니다... 저는 다른 용도때문에 올렸습니다.) 우선 Keil의 프로젝트 옵션에서 Linker항목에서 Use Memory Layout from Target Dialog의 체크를 풀어서 Scatter File 파일을 사용하게끔 설정하여야 합니다. Keil을 사용하면 기본구조는 나와있기때문에 그다지 어렵지 않게 사용할 수 있습니다. ramfunction.c라는 파일에 foo 섹션을 만들어(예제 사이트 참조) 사용하였고 sct 파일에 섹션의 위치를 설정해주었습니다. 그리고 아래처럼 함수의 위치를 main 함수에서 불러주었습니다. printf("Func L..