www.kn34pc.com
https://kn34pc.com/forums/

CH32
https://kn34pc.com/forums/viewtopic.php?f=79&t=1198
Страница 1 от 1

Автор:  LZ2WSG [ 17 Сеп 2024, 13:36 ]
Заглавие:  CH32

CH32 през Arduino IDE
https://github.com/openwch/arduino_core_ch32?tab=readme-ov-file

URL text box link:
https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json

добавяне: платка: CH32 -> изтегляне
към Arduino IDE v2.3.2, win10 64bit

Пример: микроконтролер CH32V003J4M6
Прикачени файлове:
CH32V003J4M6.jpg
CH32V003J4M6.jpg [ 138.35 KiB | Прегледано 2974 пъти ]

Blink към извод PC4 / pin_7:
Код за потвърждение:
// CH32V003J4M6
//                          _____
// OSCI/URX/A1/PA1/A6/PD6 -|  ^  |- PD4/PD5/PD1/A7/A5/UTX/SWIO
//                    VSS -|     |- PC4/A2/MCO
//            OSCO/A0/PA2 -|     |- PC2/SCL
//                    VDD -|_____|- PC1/SDA

void setup() {
  pinMode(PC4, OUTPUT);
}

void loop() {
  digitalWrite(PC4, HIGH);
  delay(100);
  digitalWrite(PC4, LOW);
  delay(100);
}

Захранване: на 3,3V, на 5V :super
Flash: 16 kB , RAM: 2 kB
HSI 48 MHz
цена: примерно 30 ст. за брой :smt041

Програмиране: през 1 проводник чрез WCH-LinkE програматор.

Недостaтък през Arduino IDE виждам в използването на много памет:
Sketch uses 10380 bytes (63%) of program storage space. Maximum is 16384 bytes.
Global variables use 512 bytes (25%) of dynamic memory, leaving 1536 bytes for local variables. Maximum is 2048 bytes.
---
През MounRiver Studio за blink на същия извод използваната Flash е примерно 7 пъти по-малко:
Код за потвърждение:
14:43:37 **** Build of configuration obj for project ch32v003j4m6_blink ****
make -j4 all
   text      data       bss       dec       hex   filename
   1192        24       264      1480       5c8   ch32v003j4m6_blink.elf

14:43:39 Build Finished. 0 errors, 0 warnings. (took 1s.608ms)

Автор:  LZ2WSG [ 19 Яну 2025, 14:00 ]
Заглавие:  Re: CH32

USB към CH32V203C8T6: USB кабел, в WCHISPStudio 3 клика на мишката и blink.hex се записа в микроконтролера. LED мига.
При включване на модула трябва да се задържи бутона BOOT0.

Прикачени файлове:
wchispst.jpg
wchispst.jpg [ 171.63 KiB | Прегледано 2689 пъти ]
ch32v203c8t6_blink.zip [8.06 KiB]
93 пъти

Автор:  LZ2WSG [ 07 Юни 2025, 06:58 ]
Заглавие:  Re: CH32

Заета памет от кода за конкретна конструкция, компилация при 3 нива на оптимизация /от налични 8/. Допада ми на какво е способно.

Optimization level: None(-O0)
Код за потвърждение:
   text      data       bss       dec       hex   filename
  11632       472       284     12388      3064   ch32v003j4m6.elf

Optimization level: Optimize fast(-Ofast)
Код за потвърждение:
   text      data       bss       dec       hex   filename
   8688       472       284      9444      24e4   ch32v003j4m6.elf

Optimization level: Optimize size(-Os)
Код за потвърждение:
   text      data       bss       dec       hex   filename
   6352       472       284      7108      1bc4   ch32v003j4m6.elf

Автор:  LZ2WSG [ 07 Юни 2025, 17:00 ]
Заглавие:  Re: CH32

като негатив: в CH32V003 PLL е само с коефициент *2 (не може да се оувърклокне).
Консумацията на ток при това не е висока: Idd ~ 7,5 mA (кварц 24 MHz -> PLL 48 MHz)
Максимално възможната честота по входа ETR TIM1 с прескалер /8 е достатъчно висока, напр. 150 MHz.

И нямат 32 битов таймер (има 1 само CH32V203RB?).

Прикачени файлове:
pll_v003.jpg
pll_v003.jpg [ 53.78 KiB | Прегледано 2430 пъти ]

Автор:  LZ2WSG [ 09 Юни 2025, 19:28 ]
Заглавие:  Re: CH32

Преместване на изводи/функции в CH32V (Alternate Function Remapping): TIM1_ETR от pin_5 -> на pin_8. Необходима е документацията на чипа и файла ch32v00x_gpio.c. Направили са всичко с един ред. Просто и бързо.
Код за потвърждение:
 * @fn      GPIO_PinRemapConfig
 *
 * @brief   Changes the mapping of the specified pin.
 *
 * @param   GPIO_Remap - selects the pin to remap.
 *            GPIO_Remap_SPI1 - SPI1 Alternate Function mapping
 *            GPIO_PartialRemap_I2C1 - I2C1 Partial Alternate Function mapping
 *            GPIO_FullRemap_I2C1 - I2C1 Full Alternate Function mapping
 *            GPIO_PartialRemap1_USART1 - USART1 Partial1 Alternate Function mapping
 *            GPIO_PartialRemap2_USART1 - USART1 Partial2 Alternate Function mapping
 *            GPIO_FullRemap_USART1 - USART1 Full Alternate Function mapping
 *            GPIO_PartialRemap1_TIM1 - TIM1 Partial1 Alternate Function mapping
 *            GPIO_PartialRemap2_TIM1 - TIM1 Partial2 Alternate Function mapping
 *            GPIO_FullRemap_TIM1 - TIM1 Full Alternate Function mapping
 *            GPIO_PartialRemap1_TIM2 - TIM2 Partial1 Alternate Function mapping
 *            GPIO_PartialRemap2_TIM2 - TIM2 Partial2 Alternate Function mapping
 *            GPIO_FullRemap_TIM2 - TIM2 Full Alternate Function mapping
 *            GPIO_Remap_PA1_2 - PA1_2 Alternate Function mapping
 *            GPIO_Remap_ADC1_ETRGINJ - ADC1 External Trigger Injected Conversion remapping
 *            GPIO_Remap_ADC1_ETRGREG - ADC1 External Trigger Regular Conversion remapping
 *            GPIO_Remap_LSI_CAL - LSI calibration Alternate Function mapping
 *            GPIO_Remap_SDI_Disable - SDI Disabled
 *          NewState - ENABLE or DISABLE.
 *
 * @return  none
 */
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState) ...

Код за потвърждение:
  // CH32V003J4M6 -> TIM1_RM = 00 Default mapping PC5, pin_5
  // RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOC, ENABLE);

  // CH32V003J4M6 -> TIM1_RM = 10 Partial mapping, PD4, pin_8
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOD, ENABLE);
  GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM1, ENABLE);

CH32V003J4M6 се записва през pin_8, както ие и вход на таймера TIM1_ETR (за честотомер). Конфликт няма (даже не е необходимо превключване за запис/тестване).

За себе си намерих "10 центовия" 32-битов микроконтроллер като пълна замяна на ATtiny13A/PIC12F675, като има и "много повече ресурси и фукции в корпуса си.

Прикачени файлове:
rm.jpg
rm.jpg [ 147.89 KiB | Прегледано 2422 пъти ]

Автор:  LZ2WSG [ 26 Юни 2025, 16:45 ]
Заглавие:  Re: CH32

Изненада (негативна): CH32V203F8P6 няма изводи за кварцов резонатор, няма вход за външен тактов генератор.
Ще си купим CH32V203F6P6 ... :smt069
---
CH32V203F6P6 има изводи за кварцов резонатор, няма хадруерна I2C.

Автор:  LZ2WSG [ 28 Авг 2025, 07:13 ]
Заглавие:  Re: CH32

LED blink PA2, CMSIS за CH32V003J4M6.
SystemCoreClock / 12000 е опитно подбранo с логическия анализатор до ~1ms.
Еднакъв код както за STM32. Тук-там: с подобни наименования на регистри.

Код за потвърждение:
#include "ch32v00x.h"
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

// CH32V003J4M6
//                          _____
// OSCI/URX/A1/PA1/A6/PD6 -|  ^  |- PD4/PD5/PD1/A7/A5/UTX/SWIO
//                    VSS -|     |- PC4/A2/MCO
//            OSCO/A0/PA2 -|     |- PC2/SCL
//                    VDD -|_____|- PC1/SDA

void GPIO_init(void);
void delay_ms(uint32_t ms);

void GPIO_init(void) {
  // GPIOA clock enable
  RCC->APB2PCENR |= RCC_IOPAEN;

  // PA2 universal push-pull output mode -> CNF2 = 0b00
  GPIOA->CFGLR &= ~GPIO_CFGLR_CNF2;

  // output mode, maximum speed 2MHz -> MODE2 = 0b10
  GPIOA->CFGLR &= ~GPIO_CFGLR_MODE2;
  GPIOA->CFGLR |= GPIO_CFGLR_MODE2_1;
}

void delay_ms(uint32_t ms) {
  uint32_t count = (SystemCoreClock / 12000) * ms;

  while (count--)
    __asm__("nop");
}

int main(void) {
  GPIO_init();

  while (1) {
    GPIOA->BSHR = GPIO_Pin_2;  // PA2 set
    delay_ms(1000);
    GPIOA->BCR = GPIO_Pin_2;   // PA2 reset
    delay_ms(1000);
  }
}


Прикачени файлове:
1s_1s.jpg
1s_1s.jpg [ 65.47 KiB | Прегледано 1019 пъти ]

Страница 1 от 1 Часовете са според зоната UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/