본문 바로가기

Study/STM32F9

CAN fitering 방법 CAN통신에서 데이터를 구분해서 받기 위해 필터링이라는 것이 존재합니다. 즉, 내가 원하는 것만 받을래~ 하는 것입니다. 레퍼런스 메뉴얼을 보시면 CAN 필터링에 대한 부분이 나옵니다. ID MASK는 32비트 1개, 16비트 2개를 사용가능하며, ID LIST의 경우 32비트 2개, 16비트 4개를 사용할 수 있습니다. 그리고 위 그림처럼 여러개의 필터를 혼합해서 사용 가능합니다. 필터링은 크게 ID LIST와 MASK 방식이 있는데, ID LIST방식은 특정 ID만 필터링하는 방법이고, ID MASK방식은 범위를 지정할 수 있습니다. MASK 설정방법입니다. 11 10 9 8 7 6 5 4 3 2 1 HEX ID 0 1 0 0 0 0 0 0 0 0 0 0x200 MASK 1 1 1 1 1 1 1 0 .. 2020. 12. 4.
CAN baudrate 설정하기 CAN은 최대 1Mbps까지 지원하는 고속 통신으로 보통 125Kbps~1000Kbps의 baudrate를 많이 사용합니다. STM에서 CAN을 사용할때 Baudrate의 설정은 조금 까다롭습니다. UART처럼 baudrate를 그대로 쓰면되는것이 아니고, 내부 PCLK에 따라 Prescaler와 BS의 값을 넣어줘야 합니다. void MX_CAN_Init_1M(void) { hcan.Instance = CAN1; hcan.Init.Prescaler = 4; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SJW = CAN_SJW_1TQ; hcan.Init.BS1 = CAN_BS1_6TQ; hcan.Init.BS2 = CAN_BS2_1TQ; hcan.Init.TTCM = D.. 2020. 12. 3.
ds1338용 HEX <-> DEC 변환 여기서 말하는 HEX DEC 변환은 DS1338용 입니다. DS1338(RTC)보기 일반적인 16진수 10진수 변환이 아닙니다.^^;; 즉 정수 30을 0x30으로 변환해주고, 0x56을 정수 56으로 변한하는 코드입니다. DEC->HEX123456789101112131415int dec2hex(int dec){ int hex; if(decDEC 1234567891011121314int hex2dec(int hex){ int dec; if(hex 2015. 2. 12.
SPI 로 M25PXX (Flash,eeprom) 사용하기 M25Pxx 시리즈 flash는 SPI를 사용하는데, 막상 하려면 조금 까다롭습니다. 참고할만한 소스가 ST에서 제공하는 STM32F1 개발보드용 소스가 있습니다. 첨부로 넣어두었는데, ST에 가셔도 받을 수 있는 자료이고요, 압축을 푸셔서 Examples\SPI\M25P64_FLASH\ 에 가시면 예제소스가 있습니다. main.c와 spi_flash.c ,spi_flash.h 파일을 자신의 보드에 맞게 수정하시면 됩니다. 우선 헤더파일인 spi_flash.h 파일만 수정해주시면 될 것같아요. 개발보드에 따라 포트 바뀌게 되어있는데 아래와 같이바꾸시면 개발보드 상관없이 쓸 수 있습니다. 헤더파일 수정 1234567891011121314151617181920212223242526272829303132333.. 2015. 2. 12.
I2C로 DS1338 (RTC) 사용하기 DS1337과 DS1338은 I2C를 이용한 RTC 입니다. 동작전압만 다르고, 똑같다고 생각하시면 됩니다. DS1337은 RTC를 이용한 시계(윤교수님 stm32f103 보드) 에서 사용했었구요. 이번에는 DS1338을 사용하게 되었습니다. DS1338이나 DS1337은 I2C를 사용하기 때문에 처음에 초기화를 해주셔야 합니다. 초기화 초기화는 아래 코드에 RTC의 DEVICE ADDRESS를 넣어주시면 됩니다.12345678910111213141516171819202122232425void I2c_init(u8 addr){ I2C_InitTypeDef I2C_InitStruct; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(I2C_SCL_.. 2015. 2. 12.
timestamp 변환하기 Timestamp란? timestamp는 1970년 1월 1일 0:00:00 을 기준으로 1초단위로 숫자를 센 것입니다. 년, 월, 일등의 데이터를 한번에 보내기 힘들기 때문에 timestamp로 한번에 보내는 것 같은데요. 하지만 이 것을 우리가 일일이 세기가 힘듦니다. 그래서 C에서는 time.h라는 라이브러리를 제공합니다. 이 라이브러리에서 현재시간을 가져올 수도 있구요. 특정시간을 timestamp로 변환도 해줍니다. 여기서 해볼 것은 특정시간을 timestamp로 만드는 방법을 알아 보겠습니다. 특정시각 2015년 1월 19일 11시 50분 30초를 가지고 timestamp로 만들어 보겠습니다. Timestamp 만들기!! 123456789101112#include time_t now;struc.. 2015. 2. 12.

인기글