Плата STM32F4VE с микроконтроллером и популярный датчик измерения температуры DS18B20. Не буду переписывать то, что есть в интернете - остановлюсь только на важных моментах которые необходимы для запуска этого датчика. Начнем с его подключения ножки представлены ниже на фото из документации
Схемы включения бывают двух типов :
1. С тремя задействованными ножками .
GND (ножка 1) - > DQ выход (он же вход ) (ножка 2) -> Vdd (3.3v) (ножка 3) - т.е. когда все включено по отдельности. См. ниже.
2. С двумя задействованными ножками.
GND(ножка 1)+ Vdd (3.3v)(ножка 3) -> DQ выход (он же вход ) (ножка 2) - т.е. "+" и "-" соединяем, а сигнальный DQ - отдельно.
Зачем это нужно ? Второй способ явно экономнее т.к. отсутствует дополнительный провод .. и когда датчиков на шине много это конечно плюс.. но не надо забывать и о питании датчика и вполне возможно, что самому дальнему датчику (например в 30 метрах от источника питания) уже будет не получить 3V3 .. Вообщем стоит, конечно сначала определиться со схемой, а потом выбирать.
Я выберу пункт 1.
Далее ...
Еще одним основным и важным пунктом является подтяжка сигнальной линии DQ (ножка 2) . Вот этот момент см. ниже - мы должны соединить DQ с "+" питания.
На этом все. Остальное можно найти самостоятельно в документации к DS18B20.
Итак приступим ..
1. Берем датчик и припаиваем к нему провода и сопротивление (не красиво это всего лишь эксперимент ..)
GND (левый провод на фото выше) датчика подключаем к GND платы
DQ (cредний провод на на фото выше) подключаем к PB1 платы
+3V3 ( правый провод на фото выше) датчика подключаем к +3V3 платы
2. Подключаем все к плате STM32F4VE и получаем следующее
После того как подключили датчик - нужно определиться куда мы будем отправлять показания.
Варианта два :
1. переходник USART - USB - > PC (например этот FT232RL или этот CP210X) и программа терминала (например PuTTY.exe)
2. Дисплей (например 5110)
Предлагаю сначала 1 после 2.
Итак USART - USB - > PC я остановился на CP210X (компактный, удобный).
Подключаем следующим образом
TX (CP210X ) -> PA3 (STM32F4VE)
RX (CP210X ) -> PA2 (STM32F4VE)
GND (CP210X ) -> GND (STM32F4VE)
Но понимая, что пока мы не будем принимать данные от PC и GND у нас общая между PC и программатором и платой ТО нам нужно только один (на фото ниже их два) провод -
RX (CP210X ) -> PA2 (STM32F4VE)
Один из важных моментов!!
На фото см. выше - отсутствует провод питания платы ..но светодиод светиться ... объясняю ..
В этом примере буду использовать программатор ULINK 2. Он переделан мною так чтобы питание на плату к которой он подключен приходило с него. В данном случае это плата STM32F4VE.
На этом подключение можно закончить и перейти к программированию микроконтроллера ....
Проект будем создавать в Keil uVision5 версии V5.29.0.0.
Я не буду расписывать по строчно как создать проект и добавить в него нужные библиотеки. Это я описал в статье - Первый проект на STM32F407VE. Но чтобы упростить я сделал готовый пустой проект. Его можно скачать - ссылка на ZIP архив. В интернете много сайтов с примерами по подключению датчика DS18B20. И придумывать "велосипед" смысла нет. На основании разных примеров давайте адаптируем этот датчик к плате STM32F4VE.
Итак ..
Вложенный архив, содержит проект в котором настроены порты для платы STM32F4VE это кнопки, светодиоды, временные задержки, USART. Проект для проверки и использования его как базового для выше представленной платы.
Кто не может скачать или есть желание все сделать самому - ниже приведу листинг основных файлов в архиве:
Файл main.c - основной файл
Содержимое файла:
#include "main.h"
//*******************************************************
int main(void)
{
SysTick_Config(SystemCoreClock / 1000);
// Настраиваем порты
GPIO_init();
// Настраиваем кнопки установленные на плате
button_ini();
//
// Настраиваем связь
USART2_Configuration();
//
while (1)
{
if (BUTTON_k1 == 0)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_6); //Подаем «0» на PA6
}
else
{
GPIO_SetBits(GPIOA, GPIO_Pin_6); //Подаем «1» на PA6
}
if (BUTTON_k0 == 0)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //Подаем «0» на PA7
}
else
{
GPIO_SetBits(GPIOA, GPIO_Pin_7); //Подаем «1» на PA6
}
}
}
***************************************************************************************************
Файл main.h
Содержимое файла:
#ifndef MAIN_H
#define MAIN_H
#include "port_ini.h"
#include "stm32f4xx.h"
//#include "serial.h"
// Переопределим на более удобные названия
#define BUTTON_k1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3)
#define BUTTON_k0 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)
#endif
**************************************************************************************************
Файл port_ini.c
Содержимое файла:
uint16_t delay_count; // переменная
#define DWT_CYCCNT *(volatile unsigned long *)0xE0001004
#define DWT_CONTROL *(volatile unsigned long *)0xE0001000
#define SCB_DEMCR *(volatile unsigned long *)0xE000EDFC
// Прерывание - ЭТО ОБЯЗАТЕЛЬНО!!
void SysTick_Handler(void)
{
if (delay_count > 0)
{
delay_count --;
}
}
// Задержка Микро
void delay_us(uint32_t us) // Микро секунды 10-6
{
int32_t us_count_tick = us * (SystemCoreClock/1000000);
SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT_CYCCNT = 0;
DWT_CONTROL |= DWT_CTRL_CYCCNTENA_Msk;
while(DWT_CYCCNT < us_count_tick);
DWT_CONTROL &= ~DWT_CTRL_CYCCNTENA_Msk;
}
// Задержка МиЛи
void delay_ms(uint32_t ms) // МиЛи секунды 10-3
{
int32_t ms_count_tick = ms * (SystemCoreClock/1000);
SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT_CYCCNT = 0;
DWT_CONTROL|= DWT_CTRL_CYCCNTENA_Msk;
while(DWT_CYCCNT < ms_count_tick);
DWT_CONTROL &= ~DWT_CTRL_CYCCNTENA_Msk;
}
// Задержка в виде обычного цикла
void sdelay_ms(uint16_t delay_temp)
{
delay_count = delay_temp;
while (delay_count)
{
};
}
// Конфигурируем порты для управления светодиодами встроенными в плату
void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; // создаем структуру
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); // включаем тактирования порта В
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); // включаем тактирование порта А
// Настройка порта под светодиод -> выход PB0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Светодиод на плате подключенный к порту выход РА 6
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIOA->ODR ^= GPIO_Pin_6;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Светодиод на плате подключенный к порту выход РА 7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIOA->ODR ^= GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
// Конфигурируем порты для управления кнопками встроенными в плату
void button_ini(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); // включаем тактирование порта А
GPIO_InitTypeDef init_button;
// Кнопка на плате подключенная к порту РЕ 3
init_button.GPIO_Pin = GPIO_Pin_3;
init_button.GPIO_Mode = GPIO_Mode_IN;
init_button.GPIO_Speed = GPIO_Low_Speed ;
init_button.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &init_button);
// Кнопка на плате подключенная к порту РЕ 4
init_button.GPIO_Pin = GPIO_Pin_4;
init_button.GPIO_Mode = GPIO_Mode_IN;
init_button.GPIO_Speed = GPIO_Low_Speed ;
init_button.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &init_button);
}
// Конфигурируем USART2
void USART2_Configuration(void)
{
// USART2 у которого:
// USART2 TX - PA2 - см. выше
// USART2 RX - PA3 - см. выше
GPIO_InitTypeDef GPIO_InitStructure; // Создаем структуру порта
USART_InitTypeDef USART_InitStructure; // Создаем структуру USART2
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //Включаем тактирование порта RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //Включаем тактирование порта USART2
// Можно сделать одной строчкой работает и так и так
// RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_APB1Periph_USART2,ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); //Подключаем PA3 к TX USART2
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); //Подключаем PA2 к RX USART2
//Конфигурируем PA2 как альтернативную функцию -> TX UART2.
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//Конфигурируем PA3 как альтернативную функцию -> RX UART.
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Конфигурируем настройки USART2
USART_InitStructure.USART_BaudRate = 115200; //Скорость обмена 115200 бод
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Длина слова 8 бит
USART_InitStructure.USART_StopBits = USART_StopBits_1; //1 стоп-бит
USART_InitStructure.USART_Parity = USART_Parity_No ; //Без проверки четности
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Без аппаратного контроля
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //Включен передатчик и приемник USART2
// Можно задать настройки по умолчанию строкой
// USART_StructInit(&USART_InitStructure);
USART_Init(USART2, &USART_InitStructure); // Инициализируем структуру
USART_Cmd(USART2, ENABLE); //Включаем UART
}
****************************************************************************************************
Файл port_ini.h
Содержимое файла:
#ifndef PORT_INI_H
#define PORT_INI_H
#include "stm32f4xx.h"
void GPIO_init(void);
void button_ini(void);
void delay_ms(uint32_t ms);
void delay_us(uint32_t us);
void USART2_Configuration(void);
#endif
******************************************************************************************************
Мои проект находятся на на диске D:\
Если все нормально открылось то
Project -> Rebuild all target files - > все должно пройти нормально и проект собраться
Окно Build Output
*****************************************************************************************************
Rebuild started: Project: 407_ve
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'Target 1'
compiling port_ini.c...
compiling stm32f4xx_gpio.c...
compiling main.c...
assembling startup_stm32f407xx.s...
compiling stm32f4xx_rcc.c...
compiling stm32f4xx_usart.c...
compiling system_stm32f4xx.c...
linking...
Program Size: Code=1796 RO-data=424 RW-data=24 ZI-data=1632
".\Objects\407_ve.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:03
*****************************************************************************************************
Далее прошиваем плату используя тот программатор который есть в наличии.
Я буду использовать ULINK 2.
ПРИ ПОСЛЕДУЮЩЕЙ ОПЕРАЦИИ СОТРЕТСЯ ВСЕ ТО ЧТО БЫЛО РАНЕЕ ЗАПИСАНО В МИКРОКОНТРОЛЛЕР!!! если желания стирать нет то дальше можно не читать...
Для тех кто продолжает делаем
Flash - > Erase
Процесс длиться секунд 20 у меня на ULINK 2.
После этого Окно Build Output
*******************************************************************************************
Full Chip Erase Done.
Flash Erase finished 13:02:04
*******************************************************************************************
И дальше прошиваем микроконтроллер
Flash - > Download или F8
Если все нормально то в окне Build Output будет
*******************************************************************************************
Load "D:\\Keil_pj\\407\\Objects\\407_ve.axf"
Erase Done.
Programming Done.
Verify OK.
Application running ...
Flash Load finished at 13:08:30
********************************************************************************************
После получения сообщения о прошивке микроконтроллера - проверяем ..
На плате
1. Нажимаем кнопку K0 - при этом должен загореться светодиод D3
2. Нажимаем кнопку K1 - при этом должен загореться D2
Если видим как светодиоды реагируют на кнопки - двигаемся дальше ...
Следующим пунктом необходимо определиться в каком режиме будет работать вход у платы STM32F4VE и датчик DS18B20. В моем примере будет обычный режим (не USART). Ручной 1-Wire®. Один занятый порт на плате - это удобно.
Итак начнем . .. для этого сначала добавим необходимые файлы в наш проект. Это файлы ds18b20.c, ds18b20.h, serial.c, serial.h.
Для этого
Нажимаем добавить
и в открывшемся окне вводим названия первого файла ds18b20.c - обратите внимание на то куда создаете - в моем случае D:\Keil_pj\407\Main
После того как все установили и выбрали - нажимаем Add.
Создается файл и сразу открывается
Заполняем это файл ниже приведенным содержимым:
Начало файла:
***************************************************************************************************
#include "ds18b20.h"
#include "main.h"
uint8_t ds18b20_Reset(void)
{
uint16_t status;
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // Устанавливаем на ножке PB1 - "0"
delay_us(485);// Задерживаемся на 500 микросекунд
GPIO_SetBits(GPIOB, GPIO_Pin_1); // Устанавливаем на ножке PB1 - "1"
delay_us(65);// Задерживаемся на 65 микросекунд
status = GPIOB->IDR & GPIO_IDR_IDR_1;//Проверяем ответила ли DS18b20 на шине
delay_us(485);// Задерживаемся на 485 микросекунд
return (status ? 1 : 0);//Возвращаем результат
}
uint8_t ds18b20_ReadBit(void)
{
uint8_t bit = 0;
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // Устанавливаем на ножке PB1 - "0"
delay_us(2);// Задерживаемся на 2 микросекунды
GPIO_SetBits(GPIOB, GPIO_Pin_1); // Устанавливаем на ножке PB1 - "1"
delay_us(13);// Задерживаемся на 13 микросекунды
bit = (GPIOB->IDR & GPIO_IDR_IDR_1 ? 1 : 0);//Проверяем ответила ли DS18b20 на шине
delay_us(45);// Задерживаемся на 45 микросекунд
return bit;
}
uint8_t ds18b20_ReadByte(void)
{
uint8_t data = 0;
for (uint8_t i = 0; i <= 7; i++)
data += ds18b20_ReadBit() << i;
return data;
}
void ds18b20_WriteBit(uint8_t bit)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // Устанавливаем на ножке PB1 - "0"
delay_us(bit ? 3 : 65); ///65
GPIO_SetBits(GPIOB, GPIO_Pin_1); // Устанавливаем на ножке PB1 - "1"
delay_us(bit ? 65 : 3); ///65
}
void ds18b20_WriteByte(uint8_t dt)
{
for (uint8_t i = 0; i < 8; i++)
{
ds18b20_WriteBit(dt >> i & 1);
delay_us(5);
}
}
uint8_t ds18b20_init(uint8_t mode)
{
if(ds18b20_Reset()) return 1;
if(mode==SKIP_ROM)
{
ds18b20_WriteByte(0xCC);
ds18b20_WriteByte(0x4E);
ds18b20_WriteByte(0x64);
ds18b20_WriteByte(0x9E);
ds18b20_WriteByte(RESOLUTION_12BIT);
}
return 0;
}
void ds18b20_MeasureTemperCmd(uint8_t mode, uint8_t DevNum)
{
ds18b20_Reset();
if(mode==SKIP_ROM)
{
//SKIP ROM
ds18b20_WriteByte(0xCC);
}
//CONVERT T
ds18b20_WriteByte(0x44);
}
void ds18b20_ReadStratcpad(uint8_t mode, uint8_t *Data, uint8_t DevNum)
{
uint8_t i;
ds18b20_Reset();
if(mode==SKIP_ROM)
{
//SKIP ROM
ds18b20_WriteByte(0xCC);
}
ds18b20_WriteByte(0xBE);
for(i=0;i<8;i++)
{
Data[i] = ds18b20_ReadByte();
}
}
uint8_t ds18b20_GetSign(uint16_t dt)
{
//Проверяем 11 бит
if (dt&(1<<11)) return 1;
else return 0;
}
float ds18b20_Convert(uint16_t dt)
{
float t;
t = (float) ((dt&0x07FF)>>4);
t += (float)(dt&0x000F) / 16.0f;
return t;
}
//************************************************************************************************
Конец файла .
Не забываем что в конце созданного файла нужно оставить пустую строку!!! Иначе будет выдано предупреждение компилятором.
На ошибки пока внимание не обращаем.
Далее создаем еще три файла ds18b20.h, serial.c, serial.h - не забывая куда создаем - в моем случае D:\Keil_pj\407\Main
ds18b20.h
Заполняем содержимым
Начало файла ds18b20.h
************************************************************************************************
#ifndef DS18B20_H_
#define DS18B20_H_
#include "stm32f4xx.h"
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#define SKIP_ROM 0
#define NO_SKIP_ROM 1
#define RESOLUTION_9BIT 0x1F
#define RESOLUTION_10BIT 0x3F
#define RESOLUTION_11BIT 0x5F
#define RESOLUTION_12BIT 0x7F
uint8_t ds18b20_init(uint8_t mode);
void ds18b20_MeasureTemperCmd(uint8_t mode, uint8_t DevNum);
void ds18b20_ReadStratcpad(uint8_t mode, uint8_t *Data, uint8_t DevNum);
uint8_t ds18b20_GetSign(uint16_t dt);
float ds18b20_Convert(uint16_t dt);
#endif /* DS18B20_H_ */
***************************************************************************************
Конец файла ds18b20.h
serial.c
Заполняем содержимым
Начало файла serial.c
************************************************************************************************
#include "serial.h"
void uart_send_char (USART_TypeDef * USARTx, char dat)
{
while (!(USARTx->SR & USART_SR_TXE)) {}
USART_SendData(USARTx,dat);
}
void uart_print_string(USART_TypeDef * USARTx, char * string, char newline)
{
while (*string != 0x00){ uart_send_char(USARTx, *string++);}
if (newline!=0){uart_send_char(USARTx, 13);}
}
void uart_print_value(USART_TypeDef * USARTx, long val)
{
char buffer[10] = {0};
char * head = buffer;
char cnt=0;
if (val!=0)
{
while( val )
{
*head++ = (val % 10)["0123456789"];
val /= 10;
cnt++;
}
while (cnt!=0){ cnt--; uart_send_char(USARTx, (buffer[cnt])); }
}
else
{
uart_send_char(USARTx, ('0'));
}
}
void uart_print_hex_value(USART_TypeDef * USARTx, long val)
{
char buffer[10] = {0};
char * head = buffer;
char cnt=0;
uart_send_char(USARTx, ('0'));
uart_send_char(USARTx, ('x'));
if (val<=9) uart_send_char(USARTx, ('0'));
if (val!=0)
{
while( val )
{
*head++ = (val & 0x0F)["0123456789ABCDEF"];
val=val>>4;
cnt++;
}
while (cnt!=0){ cnt--; uart_send_char(USARTx, (buffer[cnt])); }
}
else
{
uart_send_char(USARTx, ('0'));
}
uart_send_char(USARTx, (' '));
}
***************************************************************************************
Конец файла serial.c
serial.h
Заполняем содержимым
Начало файла serial.h
************************************************************************************************
//#include "stm32f10x_usart.h"
#include "stm32f4xx.h"
void uart_send_char (USART_TypeDef * USARTx, char dat);
void uart_print_string(USART_TypeDef * USARTx, char * string, char newline);
void uart_print_value(USART_TypeDef * USARTx, long val);
void uart_print_hex_value(USART_TypeDef * USARTx, long val);
***************************************************************************************
Конец файла serial.h
Все необходимые файлы создали.
Далее открываем файл main.h
И дополняем его строчками
#include "ds18b20.h"
#include "serial.h"
В итоге
Далее ...
Открываем файл main.c и дополняем его строчками
#include <stdio.h>
#include <ds18b20.h>
Переменными
char str3[10];
char str1[60];
unsigned char str2[60];
uint8_t dt[8];
uint16_t raw_temper;
float temper;
char c;
uint8_t status;
Строчкой поиска датчика
status = ds18b20_init(SKIP_ROM);
Далее чтобы ничего не потерять - сохраняемся
Далее
Проверяем нет ошибок (пока еще ни чего не выводим)
Если все нормально то увидим отсутствие ошибок ..
Попробуем вывести температуру в USART для этого убираем тестовые проверки нажатия кнопок
и добавляем в main.с строчки
Эти четыре строчки ниже добавил для того, чтобы видеть что программа крутиться нормально их можно не добавлять
---------------------------------------------------------------------------------------
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //Подаем «0» на PA
delay_ms(50);
GPIO_SetBits(GPIOA, GPIO_Pin_7); //Подаем «0» на PA
delay_ms(50);
---------------------------------------------------------------------------------------
ds18b20_MeasureTemperCmd(SKIP_ROM, 0); // запускаем датчик на преобразование
delay_ms(800); // ожидаем
ds18b20_ReadStratcpad(SKIP_ROM, dt, 0); // читаем температуру
raw_temper = ((uint16_t)dt[1]<<8)|dt[0];
if(ds18b20_GetSign(raw_temper)) c='-'; // определяем знак
else c='+';
temper = ds18b20_Convert(raw_temper);
sprintf(str1,"Температура воздуха - %c%.2f градусов \r\n",c, temper); // преобразуем для вывода строки в терминал
uart_print_string(USART2, str1,0); // выводим в терминал
delay_ms(50); // на всякий случай
Далее
И
В итого должны получить
Прошиваем микроконтроллер
Светодиод D3 на плате должен загораться и гаснуть.\
Если к плате и PC был подключен преобразователь USB - USART (как я писал выше) то и на нем (в моем случае CP210X) должен заморгать светодиод.
Но светодиодов мало, конечно нужно увидеть температуру ... Необходима программа которая нам примет данные с преобразователя и покажет температуру. Я выбрал (и уже давно) программу Puttу взять ее можно на сайте разработчика ссылка.
Заходим на сайт
Нам нужно
Нажимаем ссылку и выходим в окно для скачивания
Скачиваем для своей системы и после установки запускаем
Выбираем Serial - COM № (в моем случае как на картинке выше)
У вас после подключения USB - USART сом порт должен появиться в диспетчере устройств
Скорость порта у нас определяется в файле проекта port_ini.c в том месте где мы конфигурируем USART
вот эта строка
// Конфигурируем настройки USART2
USART_InitStructure.USART_BaudRate = 115200; //Скорость обмена 115200 бод
Нажимаем в PuTTy - Соединиться и откроется окно связи
Если не пишет по русски - пробуем исправить - для этого нажимаем в окне Putty нажимаем иконку > правой клавишей мышки и должно открыться меню
Настройки - Кодировка -выбираем
Нажимаем применить
Ура! Мы справились!
P.S.
Если нужен проект пишем на stm32@stm32res.ru
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии