'embeded/Cortex-M4 STM'에 해당되는 글 6건

  1. 2025.11.28 stm32g4 cordic fmac
  2. 2025.11.28 STM32CubeProgrammer / uart / parity
  3. 2025.11.28 stm32flash 0.5 0.7 버전과 stm32g473
  4. 2025.11.28 stm32g473 ADC calibration
  5. 2025.11.22 stm32f411 black fill board
  6. 2025.11.03 stm32g473 adc
embeded/Cortex-M4 STM2025. 11. 28. 15:50

대충 21페이지에서 발견

3.8 CORDIC
The CORDIC provides hardware acceleration of certain mathematical functions, notably
trigonometric, commonly used in motor control, metering, signal processing and many other
applications.
It speeds up the calculation of these functions compared to a software implementation,
allowing a lower operating frequency, or freeing up processor cycles in order to perform
other tasks.
Cordic features
• 24-bit CORDIC rotation engine
• Circular and Hyperbolic modes
• Rotation and Vectoring modes
• Functions: Sine, Cosine, Sinh, Cosh, Atan, Atan2, Atanh, Modulus, Square root,
Natural logarithm
• Programmable precision up to 20-bit
• Fast convergence: 4 bits per clock cycle
• Supports 16-bit and 32-bit fixed point input and output formats
• Low latency AHB slave interface
• Results can be read as soon as ready without polling or interrupt
• DMA read and write channels

 

3.9 Filter mathematical accelerator (FMAC)
The filter mathematical accelerator unit performs arithmetic operations on vectors. It
comprises a multiplier/accumulator (MAC) unit, together with address generation logic,
which allows it to index vector elements held in local memory.
The unit includes support for circular buffers on input and output, which allows digital filters
to be implemented. Both finite and infinite impulse response filters can be realized.
The unit allows frequent or lengthy filtering operations to be offloaded from the CPU, freeing
up the processor for other tasks. In many cases it can accelerate such calculations
compared to a software implementation, resulting in a speed-up of time critical tasks.
FMAC features
• 16 x 16-bit multiplier
• 24+2-bit accumulator with addition and subtraction
• 16-bit input and output data
• 256 x 16-bit local memory
• Up to three areas can be defined in memory for data buffers (two input, one output),
defined by programmable base address pointers and associated size registers
• Input and output sample buffers can be circular
• Buffer “watermark” feature reduces overhead in interrupt mode
• Filter functions: FIR, IIR (direct form 1)
• AHB slave interface
• DMA read and write data channels

[링크 : https://www.st.com/resource/en/datasheet/stm32g473cb.pdf]

 

함수 3회 호출할 만큼 부하를 상쇄할 만큼 하드웨어 계산이 빠른거겠지?

1. Configure the CORDIC:
LL_CORDIC_Config(
    CORDIC,
    LL_CORDIC_FUNCTION_COSINE, /* cosine function */

    LL_CORDIC_PRECISION_6CYCLES, /* max precision for q1.31 cosine */
    LL_CORDIC_SCALE_0, /* no scale */
    LL_CORDIC_NBWRITE_1, /* One input data: angle. Second input data (modulus) is 1 af ter cordic reset */
    LL_CORDIC_NBREAD_2, /* Two output data: cosine, then sine */
    LL_CORDIC_INSIZE_32BITS, /* q1.31 format for input data */
    LL_CORDIC_OUTSIZE_32BITS
); /* q1.31 format for output data */

If only this configuration is used, this step is done once at initialization. Otherwise, it must be repeated each
time one of the above parameters changes.
2. Write the input argument(s):
/* Write angle */
LL_CORDIC_WriteData(CORDIC, ANGLE_CORDIC);
In this case, there is only one argument, the angle (defined as a constant value π/8). The other argument is
the default modulus of 1, so does not need to be written.
As soon as the expected number of arguments is written, the calculation starts.
3. Read the result(s):
/* Read cosine */
cosOutput = (int32_t)LL_CORDIC_ReadData(CORDIC);
/* Read sine */
sinOutput = (int32_t)LL_CORDIC_ReadData(CORDIC);

[링크 : https://www.st.com/resource/en/application_note/an5325-how-to-use-the-cordic-to-perform-mathematical-functions-on-stm32-mcus-stmicroelectronics.pdf]

 

FMAC configuration
The FMAC can be configured using the HAL driver from the STM32CubeG4 MCU Package. Before accessing
any FMAC registers, the FMAC clock must be enabled:
__HAL_RCC_FMAC_CLK_ENABLE();
An area of system memory must be reserved for the coefficients:
/* Declare an array to hold the filter coefficients */
static int16_t aFilterCoeffB[51];
We must also declare a structure to contain the FMAC parameters:
FMAC_HandleTypeDef hfmac;
Now we can configure the FMAC using the HAL_FMAC_FilterConfig() function:
FMAC_FilterConfigTypeDef sFmacConfig; /* declare a filter configuration structure */
sFmacConfig.CoeffBaseAddress = 0; /* Set the coefficient buffer base address */
sFmacConfig.CoeffBufferSize = 51; /* Set the coefficient buffer size to the number of coeffs */
sFmacConfig.InputBaseAddress = 51; /* Set the Input buffer base address to the next free address */
sFmacConfig.InputBufferSize = 100; /* Set the input buffer size greater than the number of coeffs */
sFmacConfig.InputThreshold = 0; /* Set the input watermark to zero since we are using DMA */
sFmacConfig.OutputBaseAddress = 151; /* Set the Output buffer base address to the next free address */
sFmacConfig.OutputBufferSize = 100; /* Set the output buffer size */
sFmacConfig.OutputThreshold = 0; /* Set the output watermark to zero since we are using DMA */

/* No A coefficients since FIR */

sFmacConfig.pCoeffA = NULL;
sFmacConfig.CoeffASize = 0;
sFmacConfig.pCoeffB = aFilterCoeffB; /* Pointer to the coefficients in memory */
sFmacConfig.CoeffBSize = 51; /* Number of coefficients */
sFmacConfig.Filter = FMAC_FUNC_CONVO_FIR; /* Select FIR filter function */
sFmacConfig.InputAccess = FMAC_BUFFER_ACCESS_DMA; /* Enable DMA input transfer */
sFmacConfig.OutputAccess = FMAC_BUFFER_ACCESS_DMA; /* Enable DMA output transfer */
sFmacConfig.Clip = FMAC_CLIP_ENABLED; /* Enable clipping of the output at 0x7FFF and 0x8000 */
sFmacConfig.P = 51; /* P parameter contains number of coefficients */
sFmacConfig.Q = FILTER_PARAM_Q_NOT_USED; /* Q parameter is not used */
sFmacConfig.R = 0; /* R parameter contains the post-shift value (none) */
if (HAL_FMAC_FilterConfig(&hfmac, &sFmacConfig) != HAL_OK) /* Configure the FMAC */
Error_Handler(); /* Configuration Error */
The HAL_FMAC_FilterConfig() function programs the configuration and control registers, and loads the
coefficients into the FMAC local memory (X2 buffer).

[링크 : https://www.st.com/resource/en/application_note/an5305-digital-filter-implementation-with-the-fmac-using-stm32cubeg4-mcu-package-stmicroelectronics.pdf]

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

STM32CubeProgrammer / uart / parity  (0) 2025.11.28
stm32flash 0.5 0.7 버전과 stm32g473  (0) 2025.11.28
stm32g473 ADC calibration  (0) 2025.11.28
stm32f411 black fill board  (0) 2025.11.22
stm32g473 adc  (0) 2025.11.03
Posted by 구차니
embeded/Cortex-M4 STM2025. 11. 28. 15:41

아무생각없이 57600-None 으로 했더니 정체 불명의(?) NACK가 뜬다.

 

57600-Even 로 해주니 잘된다.

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

stm32g4 cordic fmac  (0) 2025.11.28
stm32flash 0.5 0.7 버전과 stm32g473  (0) 2025.11.28
stm32g473 ADC calibration  (0) 2025.11.28
stm32f411 black fill board  (0) 2025.11.22
stm32g473 adc  (0) 2025.11.03
Posted by 구차니
embeded/Cortex-M4 STM2025. 11. 28. 15:36

ubuntu 22.04 패키지로 설치된 건 0.5 버전인데

stm32g473을 boot0 핀을 이용해서 내장 부트로더로 올려보려고 하니 이런 에러가 발생한다.

0x469 장치 아이디 미지원.. 쩝..

$ stm32flash /dev/ttyUSB0
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Unknown/unsupported device (Device ID: 0x469)

 

소스가 0.7 인데 받아서 빌드하고 해보니 잘된다.

$ ./stm32flash /dev/ttyUSB0
stm32flash 0.7

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0469 (STM32G47xxx/48xxx)
- RAM        : Up to 96KiB  (16384b reserved by bootloader)
- Flash      : Up to 512KiB (size first sector: 1x2048)
- Option RAM : 48b
- System RAM : 28KiB

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

stm32g4 cordic fmac  (0) 2025.11.28
STM32CubeProgrammer / uart / parity  (0) 2025.11.28
stm32g473 ADC calibration  (0) 2025.11.28
stm32f411 black fill board  (0) 2025.11.22
stm32g473 adc  (0) 2025.11.03
Posted by 구차니
embeded/Cortex-M4 STM2025. 11. 28. 14:45

전압이 이상하게(?) 낮게 나와서 찾아 보는데 (대충 0.3v 정도?) gpt도 캘리브레이션 하라고 한다.

cubeide에 의해서 생성된 코드로 adc 가 초기화되고 나서

캘리브레이션 한 다음 약 2usec 이후에 HAL_ADC_GetValue(&hadc1); 하면 된다고 한다.

  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  extern ADC_HandleTypeDef hadc1;
  HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
  HAL_Delay(2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

  }

 

stm32g4 인데 캘리브레이션 하지 않으면 0.924 V가 나왔고

1148
0.924902 * 24 = 22.197655

 

캘리브레이션 이후에는 0.979 V가 나왔다.

1216
0.979688 * 24 = 23.512501

[링크 : https://jeonhj.tistory.com/22]

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

stm32g4 cordic fmac  (0) 2025.11.28
STM32CubeProgrammer / uart / parity  (0) 2025.11.28
stm32flash 0.5 0.7 버전과 stm32g473  (0) 2025.11.28
stm32f411 black fill board  (0) 2025.11.22
stm32g473 adc  (0) 2025.11.03
Posted by 구차니
embeded/Cortex-M4 STM2025. 11. 22. 20:17

stm32f103 bootloader 검색하면 이상하게(?) black pill 이라는게 자주 보이는데

먼가 해서 찾아보니 f411 / cortex-m4 기반의 개발보드인가 보다.


cortex-m4

[링크 : https://www.st.com/en/microcontrollers-microprocessors/stm32f411.html]

 

내가 가진거랑 거의 보드 레이아웃이 동일한 걸 보면.. 내꺼가 이 녀석의 cortex-m3의 클론인거 같기도 한데

[링크 : https://www.devicemart.co.kr/goods/view?no=14997708]

 


조금 더 찾아보니 blue pill 이라고 색상별로 나온 레퍼런스가 있고, blue -> black 순서로 후계기 인듯.

[링크 : https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill.html]

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

stm32g4 cordic fmac  (0) 2025.11.28
STM32CubeProgrammer / uart / parity  (0) 2025.11.28
stm32flash 0.5 0.7 버전과 stm32g473  (0) 2025.11.28
stm32g473 ADC calibration  (0) 2025.11.28
stm32g473 adc  (0) 2025.11.03
Posted by 구차니
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은 머지.. 멀티채널에서의 작동이려나? 

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

stm32g4 cordic fmac  (0) 2025.11.28
STM32CubeProgrammer / uart / parity  (0) 2025.11.28
stm32flash 0.5 0.7 버전과 stm32g473  (0) 2025.11.28
stm32g473 ADC calibration  (0) 2025.11.28
stm32f411 black fill board  (0) 2025.11.22
Posted by 구차니