Для реализации счётчика в uKeil, вы можете использовать микроконтроллер STM32 и программировать его на языке Си.
Пример программы для подсчёта количества нажатий на кнопку и отправки этого значения на ПК через UART:
#include "stm32f4xx.h" #include "stdio.h" int count = 0; void USART2_Init(void) { RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // Включаем тактирование USART2 GPIOA->AFR[0] |= 0x0070; // AF7 (USART2) для пинов PA2 и PA3 GPIOA->MODER |= GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1; // Пины PA2 и PA3 на альтернативной функции USART2 USART2->BRR = 42000000/115200; // Настраиваем скорость передачи USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE; // Включаем передачу и приём USART2 } void USART2_SendChar(char ch) { while (!(USART2->SR & USART_SR_TXE)); // Ждём пока буфер передатчика не освободится USART2->DR = ch; // Передаём символ } void EXTI0_IRQHandler(void) { if (EXTI->PR & EXTI_PR_PR0) { EXTI->PR |= EXTI_PR_PR0; // Сбрасываем флаг прерывания count++; USART2_SendChar(count); // Отправляем значение счётчика } } int main(void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Включаем тактирование GPIOA RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // Включаем тактирование SYSCFG SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI0_PA; // Привязываем прерывание к пину PA0 EXTI->IMR |= EXTI_IMR_MR0; // Разрешаем прерывание от линии 0 EXTI->FTSR |= EXTI_FTSR_TR0; // Прерывание по фронту NVIC_EnableIRQ(EXTI0_IRQn); // Включаем прерывание EXTI0 USART2_Init(); while (1) { } }
Этот пример программы предполагает, что кнопка подключена к пину PA0 микроконтроллера и что USART2 используется для отправки данных на ПК. В функции EXTI0_IRQHandler происходит инкрементация переменной count при каждом нажатии на кнопку, после чего это значение отправляется на ПК через UART.
Для просмотра отправленных данных на ПК, вы можете использовать программу для мониторинга COM портов, например, PuTTY.
Для реализации счётчика в uKeil, вы можете использовать микроконтроллер STM32 и программировать его на языке Си.
Пример программы для подсчёта количества нажатий на кнопку и отправки этого значения на ПК через UART:
#include "stm32f4xx.h"#include "stdio.h"
int count = 0;
void USART2_Init(void) {
RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // Включаем тактирование USART2
GPIOA->AFR[0] |= 0x0070; // AF7 (USART2) для пинов PA2 и PA3
GPIOA->MODER |= GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1; // Пины PA2 и PA3 на альтернативной функции USART2
USART2->BRR = 42000000/115200; // Настраиваем скорость передачи
USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE; // Включаем передачу и приём USART2
}
void USART2_SendChar(char ch) {
while (!(USART2->SR & USART_SR_TXE)); // Ждём пока буфер передатчика не освободится
USART2->DR = ch; // Передаём символ
}
void EXTI0_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR0) {
EXTI->PR |= EXTI_PR_PR0; // Сбрасываем флаг прерывания
count++;
USART2_SendChar(count); // Отправляем значение счётчика
}
}
int main(void) {
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Включаем тактирование GPIOA
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // Включаем тактирование SYSCFG
SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI0_PA; // Привязываем прерывание к пину PA0
EXTI->IMR |= EXTI_IMR_MR0; // Разрешаем прерывание от линии 0
EXTI->FTSR |= EXTI_FTSR_TR0; // Прерывание по фронту
NVIC_EnableIRQ(EXTI0_IRQn); // Включаем прерывание EXTI0
USART2_Init();
while (1) {
}
}
Этот пример программы предполагает, что кнопка подключена к пину PA0 микроконтроллера и что USART2 используется для отправки данных на ПК. В функции EXTI0_IRQHandler происходит инкрементация переменной count при каждом нажатии на кнопку, после чего это значение отправляется на ПК через UART.
Для просмотра отправленных данных на ПК, вы можете использовать программу для мониторинга COM портов, например, PuTTY.