| 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 Прикачени файлове: 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 Flash: 16 kB , RAM: 2 kB HSI 48 MHz цена: примерно 30 ст. за брой ![]() Програмиране: през 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.
|
||||
| Автор: | 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 [ 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, като има и "много повече ресурси и фукции в корпуса си.
|
|||
| Автор: | LZ2WSG [ 26 Юни 2025, 16:45 ] |
| Заглавие: | Re: CH32 |
Изненада (негативна): CH32V203F8P6 няма изводи за кварцов резонатор, няма вход за външен тактов генератор. Ще си купим CH32V203F6P6 ... ![]() --- 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); } }
|
|||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа |
| Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |
|