Тема: STM32, Atolic TrueStudio, CubeMX
Започаткую я таку тему. Бо питання будуть виникати постійно. Десь маю я їх (питання) ставити Може, як повезе, то й отримаю відповіді
Перше питання з яким самотужки не впорався, це коли почав розбиратись з роботою цифрового термометру DS18b20 по шині 1-wire підключений до STM32F100RB по UART. Прикладів і бібліотек в мережі повно. Хоча я не зміг ними скористатись, бо готові проекти чимось не підходили, а бібліотеками я не зміг скористатись бо не знав як ними користуватись. Навіть в репозиторії CooCox'у є дві бібліотеки, одна від ST але наворочена занадто, інша простіша onewire з хорошим описом в статті http://we.easyelectronics.ru/STM32/esch … vleno.html на початку статті є лінки на попередні статті присвячені цій бібліотеці. Вирішив взяти до свого проекту саме цю бібліотеку. Сам код бібліотеки мені зрозумілий і принцип роботи UART і 1-WIRE, як мені здається, в теорії розумію.
Розбирався, розбирався - безуспішно. І зрозумів, що я не розумію якусь річ зовсім не пов'язану з залізом і мовою С++.
Зараз спробую пояснити на прикладі. До цього, з метою самонавчання, зробив проект "Гра Хто Швидший" ось відео з макетом цієї гри https://www.youtube.com/watch?v=HSY1FD_Pkrs
Світлодіодами дригаємо, на кнопки реєгуємо, в біпер бібікаємо. Весь проект був складений з main.c плюс потрібні бібліотеки GPIO, RCC . Як бачите все працює.
Тепер до STM32 і DS18b20.
Як казав, що з готовими бібліотеками я не зміг розібратись, не розумію як ними користуватись. Створюю новий проект. Маю файл основного коду main.c і бібліотеку onewire.c, onewire.h. Компілятор зразу свариться на такі речі як unknown type name 'GPIO_InitTypeDef'. Ну як же ж не відомий як відомий.
Добре, думаю почну з нуля, створюю ще один новий проект. Який має такі файли:
main.c
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"
#include "ds18b20.c"
#define BAUDRATE 9600
int main(void){
while (1) {
}
}
і у вигляді окремої бібліотеки ds18b20.c
GPIO_InitTypeDef port;
USART_InitTypeDef usart;
void initUSART(){
//Вмикаємо тактування
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//PA2 в режим альтернативних функцій USART TX
GPIO_StructInit(&port);
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Pin = GPIO_Pin_2;
port.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &port);
//PA3 в режим альтернативних функцій USART RX
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Mode = GPIO_Pin_3;
port.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &port);
USART_StructInit(&usart);
usart.USART_BaudRate = BAUDRATE;
USART_Init(USART2, &usart);
}
Та сама фішка при компіляції unknown type name 'GPIO_InitTypeDef'
Так, розумію що я щось не розумію саму суть бібліотек і їх структуру, бо коли я кидаю код що знаходився в файлі ds18b20 в основний код main.c, а файл ds18b20.c прибираю з проекту, то все компилиться без помилок.
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"
#define BAUDRATE 9600
GPIO_InitTypeDef port;
USART_InitTypeDef usart;
int main(void)
{
void initUSART(){
//Вмикаємо тактування
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//PA2 в режим альтернативних функцій USART TX
GPIO_StructInit(&port);
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Pin = GPIO_Pin_2;
port.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &port);
//PA3 в режим альтернативних функцій USART RX
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Mode = GPIO_Pin_3;
port.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &port);
USART_StructInit(&usart);
usart.USART_BaudRate = BAUDRATE;
USART_Init(USART2, &usart);
}
while(1)
{
}
}
Остаточно переконався що я не розумію якоїсь елементарної простої речі, якої я навіть не знаю як назвати, щоб пошукати і почитати про це. Ще звернув увагу, що в #include зазвичай файли з розширенням h, а там в основному #define всілякі. Проте є в проектах і однойменні файли з розширенням с, хоч ніяк не вкладаються.
Перепрошую за мабуть зовсім чайницькі питання. Але не відвертайтесь від мене. Без цієї дрібнички я не можу далі йти. Ну не робити ж проекти з одним main.c де весь код в купу накиданий.
Дякую.