Хочу сказать спасибо всем комментаторам моих предыдущих статей о знакомстве с программированием микропроцессора (МК) Artery AT32F403A. Что-то возможно возьму на заметку. Что касаемо стабильности работы прошивки, то сообщу, в полевых испытаниях пройдено более 600 км и более 21 часа работы, без сбоев в работе канбаса и приложения. Но нет, вру. Один сбой был. При выходе из сна магнитолы, канбас "зависал", так как он по питанию подключен к магнитоле. Но эта проблема была решена временной задержкой при старте инициализации.

int main(void) {
    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
    system_clock_config();
    delay_init();
    delay_ms(2000);
    init_usb_device();
****** дальнейший код

Топорно? Не спорю, возможно. Но работает, и на основной функционал не влияет. От слова совсем. Магнитола дольше включается.

Так же хочу заметить, что все четыре статьи нужно читать последовательно, что бы не потерять нить обсуждения, так как я не ставил задачу делать самостоятельные статьи, а разделил для удобства переваривания.

Что ещё интересного и нужного.

Отправка данных в USART. Код примеров вы можете посмотреть AT32F403A_407_Firmware_Library_V2.1.4\project\at_start_f403a\examples\usart.
Рассматривать пример я не буду, потому что у себя в проекте я использовал только одну функцию передачи. Но сложностей там тоже никаких нет, вы справитесь.

uint8_t LIN_Buffer_C6[7] = {0};
********
while(tx_counter < 7) {
   while(usart_flag_get(USART3, USART_TDBE_FLAG) == RESET);
   usart_data_transmit(USART3, LIN_Buffer_C6[tx_counter++]);
}
tx_counter = 0;

Вот и весь код отправки пакета из 7 байт. Код ставится в любом удобном для вас месте.

Порты ввода/вывода. Собственно они инициализируются аналогично инициализации LED в первой статье. Единственное, нужно править строку GPIO_Init.gpio_mode в зависимости от потребностей, её значение может принимать GPIO_MODE_INPUT или GPIO_MODE_OUTPUT.

gpio_init_type GPIO_Init;

GPIO_Init.gpio_mode = GPIO_MODE_INPUT;
GPIO_Init.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
GPIO_Init.gpio_pull = GPIO_PULL_NONE;
GPIO_Init.gpio_pins = GPIO_PINS_6; 
GPIO_Init.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOC, &GPIO_Init);

GPIO_Init.gpio_mode = GPIO_MODE_OUTPUT;
GPIO_Init.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
GPIO_Init.gpio_pull = GPIO_PULL_NONE;
GPIO_Init.gpio_pins = GPIO_PINS_7; 
GPIO_Init.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOC, &GPIO_Init);
gpio_bits_reset(GPIOC, GPIO_PINS_7); // Напряжение низкого уровня
gpio_bits_set(GPIOC, GPIO_PINS_7); // Напряжение высокого уровня

Проверка на состояние порта

if (gpio_output_data_bit_read(GPIOC, GPIO_PINS_7)) {
   // на выводе высокий уровень
} else {
   // на выводе низкий уровень
}

На этом пожалуй всё.
Матёрые программисты микроконтроллеров простите. Я просто делился своими знаниями, полученными в ходе работы. Так как в интернете нет почти информации об этом МК. А сейчас есть хоть что-то.

Надеюсь мои статьи о программировании МК AT32F403A помогут кому-то решиться перейти с STM32 на AT32, и осуществить переход с минимумом головной боли, или помогут молодым программистам в изучении. Всем пока, ушёл дальше писать на Java

Комментарии (3)


  1. sami777
    10.04.2023 09:13
    +1

    Добрый день! Что типа "STM32 ST-LINK Utility" для артери есть? Т. е. писать, читать, верифицировать...


    1. arty_morris Автор
      10.04.2023 09:13
      +1

      Добрый день. Я пользовался STM32 ST-LINK Utility только ради прошивки, поэтому функцией его не знаю.
      Что касается Artery, то из Keil через программатор осуществляется и отладка и прошивка. В документации встречал ПО для прошивки, но не разобрался


    1. aabzel
      10.04.2023 09:13

      Для верификации прошивки надо использовать модульные тесты и UART-Shell
      https://habr.com/ru/articles/694408/