Китайская компания WCH (Wang Cheng Hi-Tech) выпустила линейку 32-битных микроконтроллеров, которые сейчас набирают популярность по всему миру. Для многих разработчиков они стали настоящей находкой за счёт хороших технических характеристик и низкой стоимости. Однако при программировании могут возникать некоторые трудности, например с переконфигурацией пинов порта А (GPOIA). На микроконтроллерах, таких как CH32V003, конфигурация портов ввода-вывода (GPIO) по умолчанию зависит от назначения и функциональности конкретных пинов. Порт A часто используется для подключения внешнего кристаллического резонатора или генератора тактовых импульсов, поэтому производитель настроил порт A по умолчанию на использование кристаллов, но в примерах с официального сайта мало информации о перенастройке на GPIO.
Вот что написано в даташите о битах PA12_RM:
Pin PA1 & PA2 remapping bit, this bit can be read or written by user. It controls the proper function of PA1 and PA2 (set to 1 when connected to an external crystal pin)
- 0: Pin is used as GPIO and multiplexed function
- 1: No functional role for pins
Поэтому если вы собираетесь использовать контакты PA1 или PA2 как обычные GPIO, вам придётся вручную переключить режим:
// необходимо отключить функциональность кристалла
AFIO->PCFR1 &= ~0x00008000;
// настройка портов
GPIO_InitTypeDef GPIO_Structure;
GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
//В этом режиме (GPIO_Mode_Out_PP) вывод порта может принимать два состояния:
//лог. 0 (выход подключён к земле) и лог. 1 (выход подключён к питанию)
GPIO_Structure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Structure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIOA, &GPIO_Structure);