Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Umar Egamberdie
0 / 0 / 2
Регистрация: 20.12.2015
Сообщений: 199
#1

Не могу разбираться с кодом - Микроконтроллер

28.04.2016, 09:31. Просмотров 254. Ответов 1
Метки нет (Все метки)

Нашел код с форума, которое написанное в Keil Uvision на камень stm32f103. Надо его переделать что бы работал на камне stm32f051. Начал его переделать но вот тут я не понял
C
1
2
3
4
    
GPIOA->CRL &= ~GPIO_CRL_MODE3;
GPIOA->CRL &= ~GPIO_CRL_CNF3;
GPIOA->CRL |=  GPIO_CRL_CNF3_0;
за что он отвечает или что он делает. Подскажите пожалуйста.
Вот код целиком.
Кликните здесь для просмотра всего текста

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
void delay(uint32_t del)
{
    for(volatile uint32_t i = 0; i<del; i++); } void send_presence() {  GPIOA->ODR = GPIO_Pin_3;
    delay(100);
    GPIOA->ODR = 0;
    delay(3500); //420us
    GPIOA->ODR = GPIO_Pin_3;
}
    
void one_wire_write_bit(uint8_t bit)
{
    GPIOA->ODR = 0;
    delay(bit ? 150 : 500);
    GPIOA->ODR = GPIO_Pin_3;
    delay(bit ? 650 : 200);
}
 
uint8_t one_wire_read_bit()
{
    uint8_t bit = 0;
    GPIOA->ODR = 0;
    delay(80);
    GPIOA->ODR = GPIO_Pin_3;
    delay(50);
    GPIOA->CRL &= ~GPIO_CRL_MODE3;
    GPIOA->CRL &= ~GPIO_CRL_CNF3;
    GPIOA->CRL |=  GPIO_CRL_CNF3_0;
    bit = (GPIOA->IDR&GPIO_Pin_3?1:0);
    GPIOA->CRL |=  GPIO_CRL_MODE3;
    GPIOA->CRL |=  GPIO_CRL_CNF3_0;
    delay(600);
    return bit;
}
 
void one_wire_write_byte(uint8_t data)
{
    for(uint8_t i = 0; i<8; i++)        one_wire_write_bit(data>>i & 1);
}
 
int main()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 
    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
 
    send_presence();
    delay(5500);
    one_wire_write_byte(0xCC);
    one_wire_write_byte(0x4E);
    one_wire_write_byte(0x4B);
    one_wire_write_byte(0x46);
    one_wire_write_byte(0x5F);
 
    send_presence();
    delay(5500);
    one_wire_write_byte(0xCC);
    one_wire_write_byte(0x44);
    delay(6000000);
    
    send_presence();
    delay(5500);
    one_wire_write_byte(0xCC);
    one_wire_write_byte(0xBE);
    delay(4000);
    uint16_t data = 0;
    for(uint8_t i = 0; i<16; i++) data += (uint16_t)one_wire_read_bit()<<i;
    float temp = data/16.0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2016, 09:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу разбираться с кодом (Микроконтроллер):

Помогите с кодом, не могу найти ошибку.
Добрый день, решил поиграться со своим Launchpadом. Нашел на хабре блог с...

Не могу разобраться с кодом
Нашел код с форума, которое написанное в Keil Uvision на камень stm32f103. Надо...

Приветствую, не могу разобраться с кодом программы и не могу сделать .obj файл
.model tiny; нужно будет получить исполняемый файл формата СОМ .code org 100h...

Не могу разобраться с кодом
unit SimpleSubstitution; interface uses Windows, Messages, SysUtils,...

Не могу разобраться с кодом
Есть скрипт сайта, очень сырой. И вот происходит такая проблема : в админке...

Не могу разобраться с кодом
Здравствуйте! Скажите, что выполняет программа в данном фрагменте и что...

1
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
28.04.2016, 09:54 #2
Лучший ответ Сообщение было отмечено Витальич как решение

Решение

Цитата Сообщение от Umar Egamberdie Посмотреть сообщение
но вот тут я не понял
настраивает ножку
Цитата Сообщение от Umar Egamberdie Посмотреть сообщение
GPIOA->CRL &= ~GPIO_CRL_MODE3;
C++
1
#define  GPIO_CRL_MODE3                      ((uint32_t)0x00003000)
сбрасывает биты режима относящийся к ножке 3
Цитата Сообщение от Umar Egamberdie Посмотреть сообщение
GPIOA->CRL &= ~GPIO_CRL_CNF3;
C++
1
#define  GPIO_CRL_CNF3                       ((uint32_t)0x0000C000)
сбрасывает биты конфигурации относяшиеся к ножке 3
Цитата Сообщение от Umar Egamberdie Посмотреть сообщение
GPIOA->CRL |= *GPIO_CRL_CNF3_0;
C++
1
#define  GPIO_CRL_CNF3_0                     ((uint32_t)0x00004000)
устанавливает нулевой бит конфигурации относящиеся к ножке 3
итого в конфигурации 01 режим 00
ножка в режиме "плавающий вход"
см например здесь http://microtechnics.ru/stm32-uchebnyj-kurs-gpio-porty-vvoda-vyvoda/
Цитата Сообщение от Umar Egamberdie Посмотреть сообщение
Вот код целиком.
по моему мнению, ужасно безграмотный-"смесь французского с нижнегородским"
а это вообще порадовало
C
1
2
3
4
5
6
7
8
void delay(uint32_t del)
{
    for(volatile uint32_t i = 0; i<del; i++); } void send_presence() {  GPIOA->ODR = GPIO_Pin_3;
    delay(100);
    GPIOA->ODR = 0;
    delay(3500); //420us
    GPIOA->ODR = GPIO_Pin_3;
}
кто ж так функции определяет?
если посмотреть беглым взглядом, то кажется что функция delay рекурсивная
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2016, 09:54
Привет! Вот еще темы с решениями:

Не могу разобраться с кодом
Ввести строку, содержащую несколько слов. Определить самое длинное и самое...

Не могу Разобраться с кодом
Доброго дня господа. Есть вот такой код PHP используемый в joomla для...

Не могу разобраться с кодом.
Создал подобную ветку в PHP там вроде разобрались, теперь ошибок нет. Но как...

Не могу разобраться с кодом
Добрый вечер. Прошу помощи. т.к не могу разобраться с кодом. Дали задание ,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru