초보의 아웅다웅 설계하기/STM32 88

PID 제어

\Drivers\CMSIS\DSP_Lib\Source\ControllerFunctions안에 arm_pid_init_f32.c 파일을 Merge 시키거나 arm_math 파일만을 묶어서 라이브러리로 만들어 추가해도 됩니다. 실제 사용시에는 다양한 값을 받아서 PID 제어를 하면 될 듯 싶습니다.조금 더 부드럽게 값을 만져줄 수 있어 몇개의 Factor을 받아 2중 PID 구조를 사용하였습니다. #include "arm_math.h" /* Private typedef -----------------------------------------------------------*//* Private define --------------------------------------------------------..

LSM6DSL, LIS2MDL, LPS22HB

가속, 자이로, 온도, 압감지, 마그넷 센서LSM6DSL, LIS2MDL, LPS22HB소스와 통신하는 부분을 ST에서 제공하는 프로그램에서 발췌했더니 비효율적으로 되어있습니다.데이터시트를 보고 최적화와 함께 함수들을 만들어 써야합니다. void main(void){ACCGyroAxis_TypeDef ACCAxis, GyroAxis;MagnetAxis_TypeDef MagnetAxis;float fPress, ftemperature;float fBatt;uint16_t Batt_Percent; LSM6DSL_ACCGyroInit();LIS2MDL_MagnetInit();LPS22HB_TempPreInit(); LSM6DSL_ACCGyroEnable();LIS2MDL_MagnetEnable();LPS22H..

Base Timer 인터럽트 사용 안하고 설정하기

Base Timer 인터럽트 사용 안하고 설정하기 uint32_t timers = 0; TIM_HandleTypeDef TimHandle; void main(void){ HAL_Init(); /* Configure the system clock to 48 MHz */ SystemClock_Config(); /* Compute the prescaler value to have TIMx counter clock equal to 10000 Hz */ uwPrescalerValue = (uint32_t)(SystemCoreClock / 1000000) - 1;//48000000 UART1_printf("SystemCoreClock : %d, uwPrescalerValue %d\r\n", SystemCoreClo..

STM32F Sleep Mode에서 Uart로 Wakeup하기

STM32F091 기준으로 하였습니다.다른 시리즈와는 라이브러리가 달라 변경이 필요합니다. main.c 파일에서 int main(void){ HAL_Init(); /* Configure the system clock to 48 MHz */ SystemClock_Config(); /* Configure LED2 */ BSP_LED_Init(LED2); /*##-1- Configure the UART peripheral ######################################*/ /* Put the USART peripheral in the Asynchronous mode (UART Mode) */ /* UART configured as follows: - Word Length = 8 Bits ..

SoftUart Only TX

참고 사이트 : https://github.com/blalor/avr-softuart 위 사이트에 나와있는 소스코드를 STM32F103에서 동작하도록 변경9600bps에 맞췄습니다만 본인이 사용하는 클럭 설정이나 다른 코어라면 코어의 처리 속도등을 고려해서 Timer의 발생 시간을 조절해주어야 합니다. 계산해보면 1/9600 = 0.00010416... 이므로 오차율 감안하고 104us정도 나오도록 오실로스코프로 계산하면서 맞춰주면 될 것 같습니다. ##include #include #define SU_TRUE 1#define SU_FALSE 0 // 1 Startbit, 8 Databits, 1 Stopbit = 10 Bits/Frame#define TX_NUM_OF_BITS (10)volatile s..

OLED QG-2864KSWLG01 내부 펌프 초기 코드

OLED QG-2864KSWLG01를 구해서 프로그램을 넣었습니다.웹에 도는 소스코드와 데이터시트로 구현을 하여도 동작을 하지 않았습니다.명령어를 넣을 때 데이터 시트와 웹에서는 0x80을 실제로는 0x00을 넣어야했습니다.그리고 ACK 자리에도 데이터 시트와 웹에서는 1을 실제로는 0을 넣어야 했습니다.아래 샘플코드입니다.I2C가 패리패럴로 구현되지 않고 IO로 구현되어있습니다.RES는 회로상에서 NPN TR로 ON/OFF 해서 High와 Low가 역으로 되어있습니다. #define OLED_ADDRESS 0x78 #define I2C_PORTGPIOB#define I2C_SCLGPIO_Pin_6 #define I2C_SDAGPIO_Pin_7 #define LCDRSTPORTGPIOE#define LC..

Partial Erase Done (areas with no algorithms skipped!) 에러 발생

Keil 컴파일러를 사용하여 다운로드할 때 발생하는 에러 처리 방법 다운로드할 칩의 메모리 사이즈가 맞지 않을 경우 발생 Load "STM32F401xx\\STM32F401xx.axf" No Algorithm found for: 0806E000H - 0806FFFFHNo Algorithm found for: 08070000H - 0807FFF3HPartial Erase Done (areas with no algorithms skipped!)No Algorithm found for: 0806E000H - 0806FFFFHNo Algorithm found for: 08070000H - 0807FFF3HPartial Programming Done (areas with no algorithms skipped!)..