embeded/Cortex-M4 STM2025. 11. 3. 15:24

g 시리즈는 f 시리즈보다 먼가 옵션이 많네..

 

stm32f103은 아래처럼 좀 조촐하다.

 

----

clock prescaler. sync와 async의 차이는 좀 찾아봐야 할 듯.

sync는 1/1~4 async는 1/1~256 까지 된다.

 

f103에서는 adc가 별도 클럭으로 설정이 가능했는데 

 

g473 에서는 SYSCLK로 고정되어 있는것 같고, 별도로 클럭 디바이더를 지정해 주어야 한다.

어떤 의미로는 퇴화이려나?

 

resolution. 신기한디.. 하드웨어적으로 고정된게 아니라니?

아니면 12bit 해상도인데 줄때 줄여서 주나?(LSB 날리기!)

 

scan mode. 멀 잘못횄나 왜 enabled가 없어?

 

여러채널 읽어봐야하나.. 아무튼 single / seqeunce conversion 별로 end를 보낼지 결정

 

DMA 사용하도록 되어있지 않으면 Enabled를 비활성화 된다.

 

overrun은 머지.. 멀티채널에서의 작동이려나? 

Posted by 구차니
embeded/Cortex-M3 STM2025. 10. 29. 14:45

cluade.ai의 도움으로 해결 -_-

아무튼,  값이 밀리는 것 처럼 보였던 이유는 dma를 circular로 하지 않아서 수동으로 시작했고, 첫 adc는 버려야 하는데

버리니까 두번째 들어오지 않는 문제 발생. 그래서 매번 dma_start를 해줘서 문제가 되었던 듯 하다.

 

ADC_Settings 에서 Continuous Conversion Mode 를 Disable -> Enable

 

DMA는 Mode Normal 에서 Circular로 해주면 끝

 

NVIC는 DMA1만 인터럽트 활성화 해주면 된다.

 

코드에서는 main() 에서 while() 들어가기 전에

HAL_ADC_Start_DMA() 한번 호출해주고 그 이후로는

adc callback 에서 다 받아왔을 때 값을 옮겨주고 처리루틴 부르면 끝

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
  if(hadc->Instance == ADC1)
  {
//    memcpy(ADCRaw, ADCResult, sizeof(uint16_t) * 4);
//    adc_dma_flag = 2;
  }
}

 

2024.11.04 - [embeded/Cortex-M3 STM] - stm32f103 adc + dma

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 부트로더로 부팅 전환하기  (0) 2025.10.21
EEPROM emulation for stm32  (0) 2025.10.16
stm32 cpp  (0) 2025.08.08
stm32 eeprom emulation  (0) 2025.07.29
stm32f103ret flash program / erase 테스트  (0) 2025.07.28
Posted by 구차니
embeded/전자회로2025. 10. 22. 14:11

싸니 한번 사서 가지고 놀아볼까?

 

[링크 : https://m.blog.naver.com/emperonics/222108739792]

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?itemno=E793636330] 590원

'embeded > 전자회로' 카테고리의 다른 글

스위칭 파워(스텝다운 컨버터) MP1584 사용  (0) 2025.10.18
스위칭 파워  (0) 2025.10.11
아 어쩐지 부품이 두개더라 -_-?  (0) 2025.10.08
1.8인치 TFT SPI 128x160  (0) 2025.10.07
열전대 써모커플러  (0) 2025.07.17
Posted by 구차니
embeded/Cortex-M3 STM2025. 10. 21. 18:21

stm32 시리즈 마다 달라서  boot_addr를 확인해야 하지만

아무튼 아래와 같이 작성된 코드를 호출하면 boot0 쇼트한것 처럼 부트로더가 시작된다고 한다.

/* USER CODE BEGIN 4 */
#define BOOT_ADDR 0x1FFFF000 // my MCU boot code base address
#define MCU_IRQS 70u // no. of NVIC IRQ inputs

struct boot_vectable_ {
    uint32_t Initial_SP;
    void (*Reset_Handler)(void);
};

#define BOOTVTAB ((struct boot_vectable_ *)BOOT_ADDR)

void JumpToBootloader(void)
{
/* Disable all interrupts */
__disable_irq();

/* Disable Systick timer */
SysTick->CTRL = 0;

/* Set the clock to the default state */
HAL_RCC_DeInit();

/* Clear Interrupt Enable Register & Interrupt Pending Register */
for (uint8_t i = 0; i < (MCU_IRQS + 31u) / 32; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}

/* Re-enable all interrupts */
__enable_irq();

// Set the MSP
__set_MSP(BOOTVTAB->Initial_SP);

// Jump to app firmware
BOOTVTAB->Reset_Handler();
}

/* USER CODE END 4 */

[링크 : https://community.st.com/t5/stm32-mcus/how-to-jump-to-system-bootloader-from-application-code-on-stm32/ta-p/49424]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 adc + dma.. part 2?  (0) 2025.10.29
EEPROM emulation for stm32  (0) 2025.10.16
stm32 cpp  (0) 2025.08.08
stm32 eeprom emulation  (0) 2025.07.29
stm32f103ret flash program / erase 테스트  (0) 2025.07.28
Posted by 구차니
embeded/전자회로2025. 10. 18. 16:43

언제 샀는지도 기억안나는 부품..(!!)

언제나의 습관대로 2개씩 구매해놔서 한번 배터리 터질 각오로 시도

PCB에도 칩에도 MP1584라고 써있다.


배터리 쪽은 만충이라 8.0V

 

원래있던 셋팅(?) 으로는 7.7V가 나오고 있다. 전압이 올라가면 달라지려나?

 

암튼 올바른 위치(?)의 + 에서 약간 돌리고 나서

 

5.3V 정도로 나온다.

 

18650 2개짜리 홀더가 있으니, 3.7*2 = 7.4V 를 입력받아 서보모터를 돌리는게 목적인데

2A까진 히트싱크 없어도 되지만 3A는 있어야 한다고. 흐음.. 그럼 없어도 될 듯

[링크 : https://www.coupang.com/vp/products/298245200?itemId=939169411]

'embeded > 전자회로' 카테고리의 다른 글

로터리 엔코더  (0) 2025.10.22
스위칭 파워  (0) 2025.10.11
아 어쩐지 부품이 두개더라 -_-?  (0) 2025.10.08
1.8인치 TFT SPI 128x160  (0) 2025.10.07
열전대 써모커플러  (0) 2025.07.17
Posted by 구차니
embeded/Cortex-M3 STM2025. 10. 16. 18:29

stm32용 eeprom 에뮬레이션 패키지.

cube ide에서 packs 에서 설치가 될 줄 알았는데 없고, 수동으로 풀어서 넣어주어야 한다.

 

[링크 : https://community.st.com/t5/stm32cubemx-mcus/how-to-install-x-cube-eeprom-on-stm32cube/td-p/78773]

[링크 : https://community.st.com/t5/stm32cubemx-mcus/how-can-i-install-and-use-x-cube-eeprom-middleware-in/m-p/122931]

 

받고, 풀고

[링크 : https://www.st.com/en/embedded-software/x-cube-eeprom.html#tools-software]

 

적당히 때려넣어주면 끝

[링크 : https://blog.naver.com/chcbaram/223153496808]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 adc + dma.. part 2?  (0) 2025.10.29
stm32 부트로더로 부팅 전환하기  (0) 2025.10.21
stm32 cpp  (0) 2025.08.08
stm32 eeprom emulation  (0) 2025.07.29
stm32f103ret flash program / erase 테스트  (0) 2025.07.28
Posted by 구차니
embeded/arduino(genuino)2025. 10. 14. 23:00

VIN은 외부에서 전원을 공급해 주는 것 같은데.. 여기서 끌어가는게 원래 안되어야 하는거 아닌가?

 

USB로 부터 전원을 받아 VUSB로 들어오고

 

auto selector에 의해서 VUSB가 +5V로 연결되는데, 레귤레이터를 거치지 않고 곳곳에 연결된다.

[링크 : https://docs.arduino.cc/resources/schematics/A000005-schematics.pdf]

[링크 : https://docs.arduino.cc/hardware/nano/]

 

다이오드는 30V 1A 까지 되는녀석같은데,

1A 이상 넣었다가는 파괴될수도 있으려나, 아니면 리밋만 1A 까지 걸리려나 모르겠다.

서보 모터 두세개 돌리기에는 1A로는 충분하지 않을듯 하니 별도 전원을 공급해야 겠네..

[링크 : https://www.digikey.kr/ko/products/detail/vishay-general-semiconductor-diodes-division/SS1P3L-M3-85A/4494959]

Posted by 구차니
embeded/전자회로2025. 10. 11. 22:19

LM7805와 같은 리니어 레귤레이터 말고 스위칭 레귤레이터를 찾았었는데

이 기회에 써봐야 할 듯.

 

LM2576

[링크 : https://jerry-rc.tistory.com/31]

 

LM2596

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?itemno=E610667444]

 

LM317

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?itemno=C441108509]

[링크 : https://m.blog.naver.com/ann_arbor/221359159774]

'embeded > 전자회로' 카테고리의 다른 글

로터리 엔코더  (0) 2025.10.22
스위칭 파워(스텝다운 컨버터) MP1584 사용  (0) 2025.10.18
아 어쩐지 부품이 두개더라 -_-?  (0) 2025.10.08
1.8인치 TFT SPI 128x160  (0) 2025.10.07
열전대 써모커플러  (0) 2025.07.17
Posted by 구차니
embeded/arduino(genuino)2025. 10. 11. 21:01

아두이노 나노 v3.0 이고, 아래의 셋팅으로 진행함

 

라이브러리 매니저에서 servo / arduino 를 설치하고

 

귀찮으니 D5/D6/D9/D10 옮겨가며 해보는걸로 하고, 일단은 날로 먹기 모드 ㅋㅋ

 

아래 코드를 대충 작성해서 넣어주면

#include <Servo.h>

Servo myservo[4];
String inputString = "";
bool stringComplete = false; 
unsigned char pwm_ch[4] = {5,6,9,10};
unsigned char pwm_val[4] = {127,127,127,127};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello");
  
  inputString.reserve(200);

  for(int idx = 0;idx < 4;idx++)
  {
      myservo[idx].attach(pwm_ch[idx]);
      myservo[idx].write(pwm_val[idx]);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  if (stringComplete) {
    char data[64] = "";
    inputString.toCharArray(data, inputString.length());
    sscanf(data, "%d,%d,%d,%d\n",
      &(pwm_val[0]),
      &(pwm_val[1]),
      &(pwm_val[2]),
      &(pwm_val[3]));

    char res[64] = "";
    sprintf(res, "get %d %d %d %d\n", pwm_val[0], pwm_val[1], pwm_val[2], pwm_val[3]);
    Serial.print(res);

    Serial.print(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;

    for(int idx = 0;idx < 4;idx++)
    {
      if(pwm_val[idx] > 255) pwm_val[idx] = 255;
      if(pwm_val[idx] < 1) pwm_val[idx] = 1;
      myservo[idx].write(pwm_val[idx]); 
    }
  }
}

void serialEvent()
{
  while(Serial.available())
  {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n')
    {
      stringComplete = true; 
    }
  }
}

 

최초 구동시 Hello가 나오고

콤마로 4개의 값을 넣어주면 된다. 개별 범위는 0~255

[링크 : https://docs.arduino.cc/learn/electronics/servo-motors/]

 

그나저나 pinMode 설정과 analogWrite() 로는 정상적으로 작동하지 않네.. 머가 문제일까?

int ledPin = 9;      // LED connected to digital pin 9
int analogPin = A0;  // potentiometer connected to analog pin A0
int val = 0;         // variable to store the read value

void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
}

void loop() {
  val = analogRead(analogPin);  // read the input pin
  analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}

[링크 : https://support.arduino.cc/hc/en-us/articles/9350537961500-Use-PWM-output-with-Arduino]

 

그래서 찾아보니

servo는 대부분 pwm이 아니라는 이야기. 아.. 그렇지! pwm이 아니지?!

[링크 : https://forum.arduino.cc/t/analogwrite-vs-servo-write/370486/3]

[링크 : https://forum.arduino.cc/t/servo-with-analogwrite/438505/7]

'embeded > arduino(genuino)' 카테고리의 다른 글

아두이노 나노 전류  (0) 2025.10.14
아두이노 시리얼 이벤트 핸들러  (0) 2025.10.09
퀄컴 아두이노 인수  (0) 2025.10.08
아두이노 sd 카드  (0) 2025.08.24
skt-444 콘덴서 마이크 모듈 분해  (0) 2025.08.07
Posted by 구차니
embeded/arduino(genuino)2025. 10. 9. 22:44

예제로 맨날 폴링만 보다보니 인터럽트가 될거라 생각을 못했네..

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

 

[링크 : https://docs.arduino.cc/built-in-examples/communication/SerialEvent]

[링크 : https://juahnpop.tistory.com/85]

[링크 : https://m.blog.naver.com/dhtpals32123/222270427302]

'embeded > arduino(genuino)' 카테고리의 다른 글

아두이노 나노 전류  (0) 2025.10.14
arduino nano로 4채널 pwm 출력하기  (0) 2025.10.11
퀄컴 아두이노 인수  (0) 2025.10.08
아두이노 sd 카드  (0) 2025.08.24
skt-444 콘덴서 마이크 모듈 분해  (0) 2025.08.07
Posted by 구차니