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-M3 STM2025. 11. 26. 17:43

좀 더 써봐야 알겠지만, STM32F103C8T6과 STLink v2 클론 SWD로 작동 확인완료!

그나저나 reset은 안해놔서 리셋이 될지 모르겠네

 

Posted by 구차니
embeded/Cortex-M3 STM2025. 11. 24. 19:08

pre-build steps 에서 명령을 주어 특정 파일을 행성해서 그 변수에 값을 넣어주는 방식

머.. 어짜피 이것도 makefile로 생성될테니 방법은 방법이지

 

 

git log --pretty=format:'#define GIT_INFO_PRESENT%n static const char* GIT_INFO = "Version Information=[%H,%d]\r\n";' -n 1 > ../Core/Inc/gitcommit.h

[링크 : https://community.st.com/t5/stm32-mcus-embedded-software/git-commit-hash-flashed-along-with-my-code/td-p/179180]

Posted by 구차니
embeded/Cortex-M3 STM2025. 11. 22. 20:26

예제

[링크 : https://github.com/miniwinwm/BluePillDemo]

 

ATMEL AVR 아두이노 대신 stm32를 넣기 시작한게 bluepill 인가..?

[링크 : https://deepbluembedded.com/stm32-blue-pill-pinout-programming-guide/]

 

c8과 c6 두가지가 있다는데 플래시와 메모리 용량이 차이가 많이 난다.

  • Arm® 32-bit Cortex®-M3 CPU core
    • 72 MHz maximum frequency, 1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
    • Single-cycle multiplication and hardware division
  • Memories
    • 64 or 128 Kbytes of Flash memory
    • 20 Kbytes of SRAM

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

 

  • ARM 32-bit Cortex™-M3 CPU Core
    • 72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
    • Single-cycle multiplication and hardware division
  • Memories
    • 16 or 32 Kbytes of Flash memory
    • 6 or 10 Kbytes of SRAM

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

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-M3 STM2025. 11. 22. 19:40

단순하게 전원만 연결되는줄 알았는데

윈도우에서는 잘못된 장치라고 떠서, 리눅스에서 확인

 

boot0 - 0  / boot1 - 0 에 usb 연결

[   50.788963] usb 1-1.1: new full-speed USB device number 4 using ehci-pci
[   50.853992] usb 1-1.1: device descriptor read/64, error -32
[   51.023960] usb 1-1.1: device descriptor read/64, error -32
[   51.196938] usb 1-1.1: new full-speed USB device number 5 using ehci-pci
[   51.261946] usb 1-1.1: device descriptor read/64, error -32
[   51.429943] usb 1-1.1: device descriptor read/64, error -32
[   51.533019] usb 1-1-port1: attempt power cycle
[   52.113007] usb 1-1.1: new full-speed USB device number 6 using ehci-pci
[   52.524932] usb 1-1.1: device not accepting address 6, error -32
[   52.589928] usb 1-1.1: new full-speed USB device number 7 using ehci-pci
[   53.004924] usb 1-1.1: device not accepting address 7, error -32
[   53.005142] usb 1-1-port1: unable to enumerate USB device

 

boot0 - 1 / boot1 - 0에 usb 연결. 차이는 없다.

[  225.014866] usb 1-1.1: new full-speed USB device number 8 using ehci-pci
[  225.079866] usb 1-1.1: device descriptor read/64, error -32
[  225.253817] usb 1-1.1: device descriptor read/64, error -32
[  225.420787] usb 1-1.1: new full-speed USB device number 9 using ehci-pci
[  225.485801] usb 1-1.1: device descriptor read/64, error -32
[  225.654762] usb 1-1.1: device descriptor read/64, error -32
[  225.756872] usb 1-1-port1: attempt power cycle
[  226.337664] usb 1-1.1: new full-speed USB device number 10 using ehci-pci
[  226.756996] usb 1-1.1: device not accepting address 10, error -32
[  226.820602] usb 1-1.1: new full-speed USB device number 11 using ehci-pci
[  227.236577] usb 1-1.1: device not accepting address 11, error -32
[  227.236751] usb 1-1-port1: unable to enumerate USB device

 

 

일단 PA9이 USART1_TX / PA10이 USART1_RX니까 USB TTL을 이용해서 적당히 연결해줘본다.

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

 

USB TTL이 /dev/ttyUSB0으로 인식해서 설정하고 읽어보면 잘 읽힌다.

$ stm32flash /dev/ttyUSB0
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Warning: the interface was not closed properly.
Version      : 0x30
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

 

프로그램이 없어서 그런가 boot0 - 0, boot1 - 0 으로 되어있어도 내부 부트로더가 작동한다.

[링크 : https://eteo.tistory.com/417]

 

무언가 구으면 boot0 - 1, boot1 - 0 으로 하고 리셋눌러줘야 stm32flash에 응답한다.

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

stm32 cubeide git commit hash  (0) 2025.11.24
stm32f103c8t6 blue pill board  (0) 2025.11.22
stm32f103 dfu (Device Firmware Upgrade)  (0) 2025.11.19
stn32f103 usb cdc(communication device class)  (0) 2025.11.19
stm32f103 도착  (0) 2025.11.19
Posted by 구차니
embeded/Cortex-M3 STM2025. 11. 19. 19:47

리눅스/우분투

[링크 : https://manpages.ubuntu.com/manpages/xenial//man1/dfu-util.1.html]

 

윈도우

Description

STSW-STM32080 package contains all binaries and source code for DfuSe USB device firmware upgrade (DFU) software, including the demonstration, debugging GUIs and protocol layers.
It includes the DFU driver compatible with the latest Microsoft®OS.
DfuSe utility can be used to interact with the STM32 system memory bootloader or any In-Application Programming (IAP) firmware, running from the user Flash, thus allowing internal memories programming through USB.
All source files for Microsoft®Visual Studio 2012 are provided as well, to allow the customization of the default GUI interface.
  • All features

    • DfuSE USB Programming
    • Command line version
    • All binaries and sources provided
 

[링크 : https://www.st.com/en/development-tools/stsw-stm32080.html]

 

[링크 : https://community.st.com/t5/stm32cubeide-mcus/programming-stm32-in-bootloader-mode-under-linux/td-p/277572]

[링크 : https://www.os4all.com/m/70]

[링크 : https://www.os4all.com/m/69]

 

dfu 부트로더

[링크 : https://bigcoco.tistory.com/m/6]

 

 

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

stm32f103c8t6 blue pill board  (0) 2025.11.22
stm32f103 usb c 연결 + usb ttl 연결  (0) 2025.11.22
stn32f103 usb cdc(communication device class)  (0) 2025.11.19
stm32f103 도착  (0) 2025.11.19
stm32 리셋없이 디버그 붙이기  (0) 2025.11.11
Posted by 구차니