0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 27
|
||||||
1 | ||||||
Тактироание через HSE и PLL31.01.2022, 00:47. Показов 1803. Ответов 34
Метки нет Все метки)
(
Здравствуйте, я новичек в программировании микроконтроллеров. Имею отладочную плату blue pill.
Изучаю stm32 давно. Программы писал с помощью куба и библиотеки HAL. Решил попробовать библиотеку CMSIS. Нашел сайт-учебник чьим урокам следую. Написал функции инициализации тактирования через HSE и PLL, так же написал инициализацию порта. Но после прошивки , диод наPC13 не загорается, он загарается , когда я дотрагиваюсь в выводам пинов, на которые припаянны гребенки.А так не должно быть. Думал, что с МК что то, но нет, накидал программу в кубе (инициализацию тактировния и порта) и в вайле прописал toggle , и прошил. Все работало, так я понял, что ошибка в коде написанном с помощью cmsis. Ниже приведены функции, в которых есть что то, что надо исправить, подскажите пожалуйста.
0
|
|
31.01.2022, 00:47 | |
Ответы с готовыми решениями:
34
Тактирование от HSE через PLL.
SYSCLK = HSE -> PLL = HSI помогите с тактированием при CSS Проблемы с HSE STM32F100 HSE |
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 27
|
||||||
31.01.2022, 01:06 [ТС] | 3 | |||||
Сначала я сбрасываю биты , которые хочу настроить,потом выставляю их.
Вы хотите сказать, надо написать так :
0
|
Модератор
![]() 8876 / 6651 / 911
Регистрация: 14.02.2011
Сообщений: 23,413
|
|
31.01.2022, 02:18 | 4 |
покажи где?
давай по шагам что я хочу сказать абсолютно не важно, важно чтобы ты сам обнаружил ошибку битовые операции нужно изучить а не списывать друг у друга. В последнее время то ли три то ли четыре раза вижу эти сдвиги
0
|
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 27
|
|
31.01.2022, 07:58 [ТС] | 5 |
Побитовое "И" и литерал инвертирования (~) используется для выключения битов &= ~
В регистре CRH , который отвечает за биты 8-15, сначала сбрасываем биты пина , который я хочу настроить , а именно CNF13_1 , CNF13_0, MODE13_0, MODE13_1 Во так я понимаю эту строчку Добавлено через 11 минут В этой сточке я их сбрасываю &=~ вот этой комбинацией
0
|
Модератор
![]() 8876 / 6651 / 911
Регистрация: 14.02.2011
Сообщений: 23,413
|
|
31.01.2022, 09:27 | 6 |
давай по шагам
0 при любом сдвиге дает 0 ~ 0 будет все 1 (32разряда) 0xFFFFFFFFдалее | результат 0xFFFFFFFFну и последнее & GPIOC->CRH &=0xFFFFFFFF будет GPIOC->CRH я же сказал по шагам разбери, а не то что хотел увидеть ![]() Добавлено через 6 минут для сбрасываний бита мало использовать И нужно еще подготовить маску например нужно сбросить 2 и 3 бит создаем маску 00001100(0xC0)инвертируем ее 11110011(0xF3) число хххххххх(х любое число 0,1) xxxxxxxx
1
|
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 27
|
|
31.01.2022, 10:22 [ТС] | 7 |
Получается, я не сбросил биты , а установил все в 1 ?
Добавлено через 24 минуты Так ведь 2<<GPIO_CRH_MODE13_Pos это и есть маска, 2 = 10, а define GPIO_CRH_MODE13_Pos это адрес бита и получается, что сначала маска, потом я сбрасываю биты
0
|
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 27
|
|||||||||||
31.01.2022, 11:51 [ТС] | 9 | ||||||||||
Добавлено через 55 минут Не так ?
0
|
3819 / 2388 / 414
Регистрация: 09.09.2017
Сообщений: 10,361
|
|
31.01.2022, 11:57 | 10 |
Код
GPIOB->CRH &=~ ((0<<GPIO_CRH_CNF13_Pos) | (2<<GPIO_CRH_MODE13_Pos)); GPIOB->CRH &=~ ((0b00<<22) | (0b10 << 22)); GPIOB->CRH &=~ (0b10 << 22); GPIOB->CRH &=~ 0b00000000 (10)000000 00000000 00000000; GPIOB->CRH &= 0b11111111 (01)111111 11111111 11111111; //скобки и пробелы добавлены для красоты
0
|
3819 / 2388 / 414
Регистрация: 09.09.2017
Сообщений: 10,361
|
|
31.01.2022, 12:03 | 12 |
0
|
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 27
|
||||||
31.01.2022, 12:12 [ТС] | 14 | |||||
Я совсем запутался.
GPIOB->CRH - после сброса имеет состояние тридцати двух нулей. Я хочу поменять 4 бита в этом регистре. А именно GPIOB_CRH_CNF13_1, GPIOB_CRH_CNF13_0, GPIOB_CRH_MODE13_1, GPIOB_CRH_MODE13_0 GPIOB_CRH_CNF13_1, GPIOB_CRH_CNF13_0 это есть GPIOB_CRH_CNF13_Pos GPIOB_CRH_MODE13_1, GPIOB_CRH_MODE13_0 Это есть GPIOB_CRH_MODE13_Pos
После сброса биты GPIOB->CRH находятся в 0, выполняю побитовые И 0000 & 0011 получаю 0000 Верно ?
0
|
3819 / 2388 / 414
Регистрация: 09.09.2017
Сообщений: 10,361
|
||||||||||||||||
31.01.2022, 12:14 | 15 | |||||||||||||||
![]() Решение
Danny1996, на вашем месте я бы вообще плюнул на GPIO_CRH_CNF13_Pos и работал просто с номерами.
За режим отвечает 4 последовательных бита, то есть, скажем, для PB0 это биты 0-3, для PB1 биты 4-7и т.д. В общем виде (4*x ... 4*x+3) для младших 8 ног (CRL) и (4*(x-8) ... 4*(x-8)+3) для старших (CRH). Таким образом надо и маску накладывать из 4 битов по смещению 4*x или 4*(x-8). Чтобы не делать лишних действий, сначала наложим маску обнуления всех 4 битов, потом выставим только нужные.
1
|
3819 / 2388 / 414
Регистрация: 09.09.2017
Сообщений: 10,361
|
|
31.01.2022, 12:16 | 17 |
А эти 11 и 01 откуда взялись? Судя по коду, из ~(00 | 10), где инверсия почему-то влезла в скобки вперед OR.
0
|
Маздаененавистник
|
||||||
31.01.2022, 12:17 | 18 | |||||
Danny1996, советую макросов написать вроде таких, тогда не будет непоняток что и куда. Просто пишешь что-то вроде
0
|
3819 / 2388 / 414
Регистрация: 09.09.2017
Сообщений: 10,361
|
|
31.01.2022, 12:28 | 19 |
Безразлично что там сразу после сброса, вы же не можете гарантировать что этот ваш код не будет выполняться после других настроек, когда содержимое CRH будет совсем неизвестным. Сам регистр выглядит примерно так
aaaabbbb ccccdddd eeeeffff gggghhhh , где aaaa-PB15, bbbb-PB14 и т.д. Вам нужно перевести его сначала в состояниеaaaabbbb 0000dddd eeeeffff gggghhhh , а потом вaaaabbbb CCCCdddd eeeeffff gggghhhh , где CCCC - те настройки, которые вам нужны.И еще раз обращаю внимание, что с GPIO_CRH_CNF13_Pos можно не заморачиваться. У вас 13-я нога, то есть 4 бита начиная от 4*(13-8)=20 Добавлено через 6 минут Нет, ему пока надо разобраться с тем, как это работает. Человек ведь для того, надеюсь, и ушел от Куба, чтобы не зависеть от тамошней магии, а понять как делать свою. А вы ему другую магию предлагаете.
0
|
Модератор
![]() 8876 / 6651 / 911
Регистрация: 14.02.2011
Сообщений: 23,413
|
|
31.01.2022, 12:30 | 20 |
вот тут и вспоминается locm,смотреть в отладчике нужно
Добавлено через 1 минуту а оттуда же, от непонимания бинарных операций
0
|
31.01.2022, 12:30 | |
31.01.2022, 12:30 | |
Помогаю со студенческими работами здесь
20
stm32 hsi/hse STM32 HSE Кварцевый резонатор устойчивость HSE запускается на повышенном напряжении (stm32f103c8t6) Автоматическое определение частоты внешнего HSE stm32f1 stm32f4 cmsis RCC настройка как проверить работу HSE& Управление PLL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |