www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 12 Ное 2025, 01:10

Часовете са според зоната UTC + 2 часа




Напиши нова тема Отговори на тема  [ 7 мнения ] 
Автор Съобщение
 Заглавие: CH32
МнениеПубликувано на: 17 Сеп 2024, 13:36 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
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 | Прегледано 2973 пъти ]

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)


Върнете се в началото
 Профил  
 
 Заглавие: Re: CH32
МнениеПубликувано на: 19 Яну 2025, 14:00 
Offline
Аватар

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


Прикачени файлове:
wchispst.jpg
wchispst.jpg [ 171.63 KiB | Прегледано 2688 пъти ]
ch32v203c8t6_blink.zip [8.06 KiB]
93 пъти
Върнете се в началото
 Профил  
 
 Заглавие: Re: CH32
МнениеПубликувано на: 07 Юни 2025, 06:58 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Заета памет от кода за конкретна конструкция, компилация при 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


Върнете се в началото
 Профил  
 
 Заглавие: Re: CH32
МнениеПубликувано на: 07 Юни 2025, 17:00 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
като негатив: в 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 | Прегледано 2429 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: CH32
МнениеПубликувано на: 09 Юни 2025, 19:28 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Преместване на изводи/функции в 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 | Прегледано 2421 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: CH32
МнениеПубликувано на: 26 Юни 2025, 16:45 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Изненада (негативна): CH32V203F8P6 няма изводи за кварцов резонатор, няма вход за външен тактов генератор.
Ще си купим CH32V203F6P6 ... :smt069
---
CH32V203F6P6 има изводи за кварцов резонатор, няма хадруерна I2C.


Върнете се в началото
 Профил  
 
 Заглавие: Re: CH32
МнениеПубликувано на: 28 Авг 2025, 07:13 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
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 | Прегледано 1018 пъти ]
Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 7 мнения ] 

Часовете са според зоната UTC + 2 часа


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com