Перейти к содержанию

Stm32F051R8T6 Основная Периферия


bardak

Рекомендуемые сообщения

Нужно помочь в написании программа в среде Keil u5. Устройство работает от внутреннего источника тактирования 8МГц. Необходимо настроить базовый таймер для создания задержки в 1мкс.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Скачайте CubeMx, там вся настройка визуальная.

Уважаемый HASL, спасибо за информацию, посмотрел! Но мне хочется понять что я делаю не так без всяких визардов!
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

тогда читайте статьи.

CubeMx вообще то создает проект для Keil-а

Создайте проект и сравните со своим

К тому же нам не известно на каком "Велосипеде" вы ездите.

т.е. каким методом или точнее какими функциями управляете перефирией. Может вы на ASM все делаете

:buba:

Изменено пользователем hasl
Ссылка на комментарий
Поделиться на другие сайты

тогда читайте статьи.

CubeMx вообще то создает проект для Keil-а

Создайте проект и сравните со своим

К тому же нам не известно на каком "Велосипеде" вы ездите.

т.е. каким методом или точнее какими функциями управляете перефирией. Может вы на ASM все делаете

:buba:

Я Вас понял, да, извиняюсь, сейчас все выложу.

#include "stm32f0xx_tim.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_gpio.h"
GPIO_InitTypeDef gpioc;
TIM_TimeBaseInitTypeDef tim3;	  
void GPIOC_init(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,ENABLE);
gpioc.GPIO_Mode=GPIO_Mode_OUT;
gpioc.GPIO_OType=GPIO_OType_PP;
gpioc.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;
gpioc.GPIO_PuPd=GPIO_PuPd_NOPULL;
gpioc.GPIO_Speed=GPIO_Speed_Level_1;
GPIO_Init(GPIOC,&gpioc);
}
void TIM3_init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM3->CR1|=(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1);
tim3.TIM_Prescaler=79+1;
tim3.TIM_Period=65534+1;
TIM_TimeBaseStructInit(&tim3);
TIM_TimeBaseInit(TIM3,&tim3);
TIM_Cmd(TIM3,ENABLE);
TIM3->CR1|=(1<<0);
}
int main(void)
{
GPIOC_init();
TIM3_init();

while(1)
{
 if(TIM3->CNT==10){GPIO_SetBits(GPIOC,GPIO_Pin_8);}
 if(TIM3->CNT==20){GPIO_ResetBits(GPIOC,GPIO_Pin_8);}
}
}

Среда разработки Keil u5. Плата STM32F0DISCOVERY внешнего кварца на STM32F051R8T6 нет, используется внутренний HSI

Ссылка на комментарий
Поделиться на другие сайты

Немного не в тему.

TIM3->CR1|=(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1);

Тут достаточно было написать

TIM3->CR1 = (1<<1);

tim3.TIM_Prescaler=79+1; tim3.TIM_Period=65534+1;

А здесь вместо "+" нужен "-".

Точно не уверен, но вместо точки надо "->"

Изменено пользователем Vitemk
Ссылка на комментарий
Поделиться на другие сайты

Немного не в тему.

TIM3->CR1|=(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1);

Тут достаточно было написать

TIM3->CR1 = (1<<1);

tim3.TIM_Prescaler=79+1; tim3.TIM_Period=65534+1;

А здесь вместо "+" нужен "-".

Точно не уверен, но вместо точки надо "->"

На счет минуса я тоже согласен. Там все верно относительно синтаксиса.

Изменено пользователем gafbich
Ссылка на комментарий
Поделиться на другие сайты

C tim3 да верно, я что-то подумал, что это указатель, оказалось просто структура.

А вот "(0<<x)" считаю бессмысленной записью. Только код загромождает.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

#include "stm32f0xx.h"

#include "stm32f0xx_tim.h"

#include "stm32f0xx_rcc.h"

#include "stm32f0xx_gpio.h"

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

static uint32_t delay_timer;

void GPIOC_init(void)

{

/* GPIOC Periph clock enable */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

/* Configure PC8 and PC9 in output pushpull mode */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOC, &GPIO_InitStructure);

}

void TIM_Config(void)

{

/* TIM3 clock enable */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = 48000-1; // (48000-1) - ìë ñåê. (48-1) - ìê ñåê.

TIM_TimeBaseStructure.TIM_Prescaler = 1;

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

/* TIM Interrupts enable */

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

/* TIM3 enable counter */

TIM_Cmd(TIM3, ENABLE);

/* Enable the TIM3 gloabal Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

int main(void)

{

GPIOC_init();

TIM_Config();

while(1)

{

delay(1);

GPIO_SetBits(GPIOC,GPIO_Pin_8);

delay(1);

GPIO_ResetBits(GPIOC,GPIO_Pin_8);

}

}

void delay(uint32_t delay)

{

delay_timer = delay;

while(delay_timer != 0);

}

void TIM3_IRQHandler(void)

{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

if(delay_timer != 0) delay_timer--;

}

}

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...