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

WWDG에서 Watchdog 발생시 클리어 처리

WWDG에서 Watchdog 발생시 클리어 처리 WWDG 사용중에 특정 목적에서는 WWDG가 동작하지 않아야하는데 이런 목적으로 사용할 경우 인터럽트에서 클리어 처리 해주어야 합니다. WWDG나 IWDG는 동작하도록 한번 설정을 하면 플래그에 다시 사용히자 않도록 설정을 하여도 되지 않습니다. 이럴 때를 위해서 인터럽트과 인터럽트가 아닌 곳에서 처리하도록 양쪽에 처리를 하였습니다. (STM32L432에서 구현된 부분) 메인 .c tFunc_Typedef Func_Operate[] = { /* Random Source */ // {GenRandom, "GetADC", 0}, /* UART */ {GetuPacket, "GetUartPacket", 0}, /* SPI */ {GetsPacket, "GetSP..

MAXIM사의 Max3xxxx

Maxim사의 MAX3xxxx 칩입니다. Maxim을 선택한 이유는 RSA 키 생성이 하드웨어로 되어있어 생성 가능하다는 부분이 매력적이었습니다. Big Integer 소수를 MCU급에서 생성한다는 게 너무 어렵습니다. (사실 돌려봤었는데 십여분 기다리다가 생성이 안되서 포기했습니다. 사용하는 유저가 몇초만 기다려도 너무 오래걸린다고 생각하는데 분단위로도 생성이 안된다니!!! - 도어락 개발할 때 문 열릴 때 모터 돌아가는 그 몇초도 길다고 생각해서 멜로디를 넣어 체감시간을 다른 방향으로 돌렸는데 말이죠.) 이 소수 생성기는 추후에 동형 암호에 사용하려고 생각하고 있습니다. (이 MCU에서 별도로 소수 생성 부분만 빼줄 수 있도록 내부 로직이 설계되어 있다면요...) Maxim의 컴파일러는 대부분의 무료..

통신 프로토콜

홈네트워크 통신연동할 때 쓴 후로 통신 프로토콜 짤 때 기본으로 잡고 가장 많이 썼던 구조입니다.(홈넷 통신 프로토콜과는 약간 다름) 간단하면서도 필요한 부분은 다 있어서 괜찮았습니다. 데이터 무결성차원에서 Check Sum과 Check Xor 자리에 CRC16을 사용하기도 하였고 HMAC을 사용하기도 하였습니다.(HMAC의 경우 앞 바이트만 잘라서 사용) Byte 1 1 1 N 1 1 1 Data 0x02 Var. Var. Var. Var. Var. 0x03 Field Start Cmd Length Data N Sum Xor End Host쪽에서 CMD에서 0x01를 보내면 Slave쪽에서 최상위 비트에 1을 넣어서 0x81로 데이터를 보내는 방식을 사용하였고, CMD 1바이트로 부족한 경우가 많아 D..

ST에서 지원하는 Low Layer 드라이버

ST에서 이제 Stdlib를 지원하지 않고 Hal만 지원하여 답답했었는데 보다보니 Hal 드라이버만이 아닌 LL Driver을 지원했습니다. Drivers\STM32L1xx_HAL_Driver\Src 폴더에 보면 stm32fxxx_hal로 시작하는 것말고 stm32fxxx_ll로 시작하는 것들이 있는데 이게 Low Layer Driver이었습니다. 처음에 드라이버 추가할 때 뭘까 했었는데 이게 Low Layer였다니... 기존에 Stdlib를 썼거나 hal이 뜻하는대로 되지 않아 불편한 사람들에게는 정말 좋은 것 같습니다. (다른 건 몰라도 SPI나 UART등등 통신으로 Hal 처리하는 게 원하는 대로 되지 않아 불편했었는데 다행이었습니다.) /*********************************..

HAL_UART_Receive_IT 사용하지 않기

ST에서 기존 드라이버들에서 Hal 드라이버로 변경한 후 UART 데이터 수신 후 문제가 많았습니다. 물론 틀에 박혀서 사용해야한다는 고정관념 때문이었습니다. 그러다 어떤 분이 올려놓으신 글(당근이)과 아래 사이트를 보면서 아! 꼭 제시해준 방법을 쓰지 않아도 되는구나 기존처럼 사용해도 되는 구나! 하는 것을 알게 되었습니다. (세상에는 똑똑하신 분들이 많네요. 고정관념 진짜 ㅠㅠ) https://www.basic4mcu.com/bbs/board.php?bo_table=d1&wr_id=40&page=3 Uart 설정 char Uart1RxData; /* USART1 */ Uart1Handle.Instance = USART1; Uart1Handle.Init.BaudRate = 115200;//Baud Ra..

Coocox Misc Controls에서 지원하는 옵션 모음

Coocox Misc Controls에서 --help;를 입력하면 나옵니다. 매뉴얼 없다고 계속 찾아다녔는데 이런 방법이.... 국내에서 들어오는 아이피를 막았는지 Coocox사이트에 접속이 불가능하네요. 이런 컴파일러를 써야하다니. ㅠㅠ Set architecture -a KEYWORD Shared library control for HP/UX compatibility -A ARCH, --architecture ARCH -b TARGET, --format TARGET Specify target for following input files -c FILE, --mri-script FILE Read MRI format linker script -d, -dc, -dp Force common symbols t..

IAR에서 Stack 할당 계산

IAR에서 Stack 할당 계산 IAR에서 Map File이 생성되도록 설정하고 Stack 분석을 체크한 후 컴파일을 하면 Stack에 사용되는 용량이 나오고 총 용량의 합보다 더 큰 용량을 Stack에서 설정을 하면 됩니다. 동적 라이브러리로 생성하는 경우 동적라이브러리에 Stack 사이즈를 설정하지 않아도 되고 라이브러리를 불러 사용하는 프로그램에서 최소한 같은 용량이나 그 이상의 용량을 설정해주어야 인터럽트 발생시에 문제가 생기지 않는 듯 싶습니다. Keil과 IAR을 컴파일 후 서로 결과가 달라 양쪽을 모두 사용하기 위해서는 양쪽 모두 확인해 주어야 합니다.(IAR에서 된다고 Keil에서 되는 것도 아니고 Keil에서 된다고 IAR에서 되는 것도 아니라서 확인 하지 않았다가 낭패를 볼 수 있습니다..