Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 27

Stm8 передача из АЦП в UART

04.02.2021, 21:42. Показов 1493. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, нашел код передачи из АЦП в UART, но не вижу в каком именно месте в UART передаются данные от АЦП
Вот сам код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "stm8s.h"
#include "stm8s_gpio.h"
#include "stm8s_clk.h"
#include "stm8s_adc1.h"
#include "stm8s_tim4.h"
#include "stm8s_uart1.h"
#include "stdio.h"
 
#define LED_PORT GPIOB
#define LED GPIO_PIN_5
 
#define TIM4_PERIOD       124
 
#define PUTCHAR_PROTOTYPE void putchar (char c)
 
ErrorStatus status = FALSE;
volatile uint16_t count;
volatile uint16_t adc2;
 
INTERRUPT_HANDLER(IRQ_Handler_TIM4, 23)
{
    if (count)
        count--;
 
    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}
 
INTERRUPT_HANDLER(IRQ_Handled_ADC1,22)
{
    adc2=ADC1_GetConversionValue();
 
    ADC1_ClearITPendingBit(ADC1_IT_EOC);
}
 
void delay_ms(uint16_t ms)
{
    TIM4_Cmd(DISABLE);       // stop
    TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
    TIM4_ClearFlag(TIM4_FLAG_UPDATE);
    TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
 
    count = ms;
 
    TIM4_Cmd(ENABLE);       // let's go
 
    while(count);
}
 
 
int main( void )
{
 
    // ----------- GPIO CONFIG -------------------
    GPIO_DeInit(LED_PORT);
    GPIO_Init(LED_PORT, LED, GPIO_MODE_OUT_PP_LOW_FAST);
 
    // ---------- CLK CONFIG -----------------------
    CLK_DeInit();
 
    CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
    CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); // set 16 MHz for CPU
 
    TIM4_DeInit();
    // uncomment if use HSE on Quartz
    //status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,
    //                CLK_CURRENTCLOCKSTATE_DISABLE);
 
    // ------------ ADC1 -------------------
    GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_IN_FL_NO_IT);
    ADC1_DeInit();
    ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D8,
            ADC1_EXTTRIG_TIM,DISABLE, ADC1_ALIGN_RIGHT,  ADC1_SCHMITTTRIG_CHANNEL2, DISABLE);
    ADC1_ITConfig(ADC1_IT_EOCIE ,ENABLE);
 
    // ------------ UART1 -------------------
    UART1_DeInit();
 
    // 8N1
    UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
              UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
 
 
    adc2=0;
    enableInterrupts();
 
    for(;;)
    {
        GPIO_WriteReverse(LED_PORT, LED);
        ADC1_StartConversion();
        delay_ms(500);
        printf("value: %u\n",adc2);// мне кажется в этой функции переменная "c" должна принимать значение adc2 уже в виде 
        строки, но этого я здесь не вижу
        delay_ms(500);
    }
}
 
 
PUTCHAR_PROTOTYPE
{
    // Write a character to the UART1
    UART1_SendData8(c);
    // Loop until the end of transmission 
    while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
 }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2021, 21:42
Ответы с готовыми решениями:

Передача 10-разрядного результата измерения АЦП по UART
Всем доброго дня. Пытаюсь переслать 10-разрядную величину результата измерения АЦП по UART. Результат приходит, но двумя байтами. Сначала...

Болеет UART в STM8 Discovery
В общем вечно у мя чёто либо не работает либо фигово работает.....решил поковырять UART в Dyscovery, подключил через PinBoard к компу,...

АЦП в STM8 и внутренний ИОН
И это снова я, пытающийся разобраться с некоторыми хитростями и тонкостями. В RM0031 написано (для справки - tIDLE около 1...

6
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
05.02.2021, 00:22
C
1
2
3
4
5
6
7
PUTCHAR_PROTOTYPE
{
    // Write a character to the UART1
    UART1_SendData8(c);
    // Loop until the end of transmission 
    while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
 }
Автор переопределил вывод символа для printf -- поэтому вся печать валится как раз в UART
0
0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 27
05.02.2021, 15:17  [ТС]
Прошу прощения за тупость, а где здесь взаимосвязь между adc2 и uart? Я так понимаю, что
C
1
#define PUTCHAR_PROTOTYPE void putchar (char c)
обычная подстановка и в итоге получается

C
1
2
3
4
5
6
7
void putchar (char c)
{
    // Write a character to the UART1
    UART1_SendData8(c);
    // Loop until the end of transmission 
    while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
}
А где же тогда в коде вызов этой функции с передачей ей в качестве аргумента adc2 ?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
05.02.2021, 15:28
Цитата Сообщение от mixa_88 Посмотреть сообщение
где же тогда в коде вызов этой функции
Цитата Сообщение от vantfiles Посмотреть сообщение
Автор переопределил вывод символа для printf -- поэтому вся печать валится как раз в UART
Цитата Сообщение от mixa_88 Посмотреть сообщение
с передачей ей в качестве аргумента adc2
C
1
printf("value: %u\n",adc2)
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
05.02.2021, 15:54
Цитата Сообщение от mixa_88 Посмотреть сообщение
А где же тогда в коде вызов этой функции с передачей ей в качестве аргумента adc2 ?
Он неявный и делается внутри printf

Добавлено через 22 минуты
...кстати, лично я крайне не одобряю подобное хакерство с переопределением стандартных функций
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
05.02.2021, 17:18
Цитата Сообщение от vantfiles Посмотреть сообщение
я крайне не одобряю подобное хакерство
...в основном это делается для портации PC-библиотек, использующих 'pchar()' для вывода текста, ну, и разу уж переопределение требуется - использовать стандартную функцию никто не мешает ). В частности, многие разработчики МК маппируют pchar() для вывода в терминал ПК в момент дебага через JTAG или SWD.
0
0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 27
05.02.2021, 23:43  [ТС]
Кстати по этому коду компилятор выдает redeclared external putchar, вот сижу и думаю, где я ее еще задекларировал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.02.2021, 23:43
Помогаю со студенческими работами здесь

STM8 Работа АЦП в многоканальном режиме
Добрый день! Не могу разобраться с работой АЦП с несколькими каналами в режиме ScanMode. Настройки: запуск от таймера 1, забираем...

АЦП ->UART
Доброго времени суток. Имеем: 1. Микроконтроллер Atmega16. 2. Акселеромет ADXL102 (аналоговый выход) 3. Кривые руки Задача:...

АЦП и UART
Здравствуйте. У меня вот такая проблема. Написал программу. Снимает показание с АЦП, потом выдает на светодиодную матрицу в двоичном виде,...

Прерывания, АЦП, UART
Здравствуйте. Необходимо написать программу на контроллере atmega 16 в atmel studio, которая будет имитировать цифровой вольтметр. Имитация...

АЦП+ UART на ATmega16: проблемы
Добрый день. Имеются следующие проблемы. 1. При попытке наладить передачу значения АЦП по UART контроллер перестает отзываться после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru