Сб мар 24, 2018 14:56:43
С этого нужно было начинать.Myp3ik писал(а):А 32 разрядного таймера нет... Вернее есть, но он занят.
Сб мар 24, 2018 16:54:12
Сб мар 24, 2018 17:29:27
Сб мар 24, 2018 18:19:12
Сб мар 24, 2018 21:04:09
Table 54. TIMx Internal trigger connection
Slave TIM ITR0 (TS = 000) ITR1 (TS = 001) ITR2 (TS = 010) ITR3 (TS = 011)
TIM1 TIM15 TIM2 TIM3 TIM17
#define IS_TIM_MASTER_INSTANCE(INSTANCE)\
(((INSTANCE) == TIM1) || \
((INSTANCE) == TIM2) || \
((INSTANCE) == TIM3) || \
((INSTANCE) == TIM6) || \
((INSTANCE) == TIM15))
#define IS_TIM_SLAVE_INSTANCE(INSTANCE)\
(((INSTANCE) == TIM1) || \
((INSTANCE) == TIM2) || \
((INSTANCE) == TIM3) || \
((INSTANCE) == TIM15))
Пн мар 26, 2018 08:53:56
Пт апр 06, 2018 11:08:27
Пт апр 06, 2018 11:47:45
Среда платная (бесплатно только до 32 КБ).ВячеславX писал(а):По предварительной информации я склоняюсь к Keil
Многое можно сделать аппаратно, что даст скорость и точность.ВячеславX писал(а):Я пишу простые но быстрые программы требовательные к точным интервалам
Вт апр 10, 2018 22:03:15
#define CS_HIGH (GPIOA->BSRR |= GPIO_BSRR_BS_6)
#define CS_LOW (GPIOA->BSRR |= GPIO_BSRR_BR_6)
#define RST_HIGH (GPIOA->BSRR |= GPIO_BSRR_BS_4)
#define RST_LOW (GPIOA->BSRR |= GPIO_BSRR_BR_4)
#define CMD 0
#define DATA 1
void SPI1_init(void)
{
/*
PA4 - RES
PA5 - SPI1_SCK
PA6 - CS (soft managment)
PA7 - SPI1_MOSI
*/
RCC->AHBENR |=RCC_AHBENR_GPIOAEN;
GPIOA->MODER |=
GPIO_MODER_MODER4_0 |
GPIO_MODER_MODER5_1 |
GPIO_MODER_MODER6_0 |
GPIO_MODER_MODER7_1;
GPIOA->OSPEEDR |=
GPIO_OSPEEDER_OSPEEDR4_1 |
GPIO_OSPEEDER_OSPEEDR5_1 |
GPIO_OSPEEDER_OSPEEDR6_1 |
GPIO_OSPEEDER_OSPEEDR7_1;
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
SPI1->CR1 |=
SPI_CR1_BR_0 |
SPI_CR1_BR_1 |
SPI_CR1_BR_2 |
SPI_CR1_CPOL |
SPI_CR1_CPHA |
SPI_CR1_MSTR |
SPI_CR1_BIDIOE |
SPI_CR1_SSM ;
SPI1->CR2 = 0x800; // 9 bit
SPI1->CR1 |= SPI_CR1_SPE;
}
void SPI_Send (uint16_t data, bool cd_flag)
{
if (cd_flag)
{
SPI1->DR = data | 0x100; //set D/C = 1
}else{
SPI1->DR = data;
}
while (SPI1->SR & SPI_SR_FTLVL)
{
//FIFO waiting
}
while (!(SPI1->SR & SPI_SR_TXE))
{
//Buffer waining
}
}
Ср апр 11, 2018 11:42:04
void SPI1_init(void)
{
RCC->AHBENR |=RCC_AHBENR_GPIOAEN;
RCC->APB2ENR |=RCC_APB2ENR_SPI1EN;
GPIOA->MODER &=~
//GPIO_MODER_MODER4 |
GPIO_MODER_MODER5 |
GPIO_MODER_MODER6 |
GPIO_MODER_MODER7
;
GPIOA->MODER|=
//GPIO_MODER_MODER4_1|
GPIO_MODER_MODER5_1|
GPIO_MODER_MODER6_1|
GPIO_MODER_MODER7_1
;
GPIOA->OSPEEDR|=
GPIO_OSPEEDER_OSPEEDR4|
GPIO_OSPEEDER_OSPEEDR5|
GPIO_OSPEEDER_OSPEEDR6|
GPIO_OSPEEDER_OSPEEDR7
;
SPI1->CR1 |=
SPI_CR1_BR_0 | //
SPI_CR1_MSTR |
SPI_CR1_SSI |
SPI_CR1_SSM
;
SPI1->CR2 = 0x800; // 9 bit
SPI1->CR1 |= SPI_CR1_SPE;
}
#define CMD 0
#define DATA 1
#define CS_ENABLE GPIOA->BSRR = GPIO_BSRR_BR_4
#define CS_DISABLE GPIOA->BSRR = GPIO_BSRR_BS_4
void Lcd_Write(uint16_t cmd, uint16_t data)
{
//uint16_t temp =cmd<<8;
//SPI_Send(data |cmd<<8);
while(!(SPI1->SR & SPI_SR_TXE));
SPI1->DR =data |cmd<<8;
}
void Lcd_Init (void)
{
RCC->AHBENR |=RCC_AHBENR_GPIOAEN;
GPIOA->MODER|=GPIO_MODER_MODER4_0;
CS_ENABLE;
Delay_mS(5);
SPI1_init();
//Delay_mS(5);
Lcd_Write ( CMD , 0xe2 ); //soft reset
Lcd_Write ( CMD , 0x3d ); // charge pump
Lcd_Write ( CMD , 0x01 ); // charge pump =4
Lcd_Write ( CMD , 0x1e ); // add vop
Lcd_Write ( CMD , 0x91 ); //
Lcd_Write ( CMD , 0xa4 ); //
Lcd_Write ( CMD , 0x2f ); //
Lcd_Write ( CMD , 0xc8 ); //
Lcd_Clear(); // clear LCD
Delay_mS(10);
CS_DISABLE;
}
Ср апр 11, 2018 12:29:48
GPIOA->MODER|=
//GPIO_MODER_MODER4_1|
GPIO_MODER_MODER5_1|
GPIO_MODER_MODER6_1|
GPIO_MODER_MODER7_1
;
Ср апр 11, 2018 12:35:26
Ср апр 11, 2018 13:17:57
Ср апр 11, 2018 22:26:01
Чт апр 12, 2018 01:18:57
Чт апр 12, 2018 08:57:25
Чт апр 12, 2018 10:18:40
Прочитайте про таймеры. http://robocraft.ru/blog/ARM/739.htmlВячеславX писал(а):Я пишу программы для использования МК в импульсных блоках питания, контроллерах шаговых двигателей, контроллерах бесколлекторных двигателей, сварочных инверторах.
STM32 это не 8-ми битные AVR. У них довольно мощная периферия и многое можно сделать аппаратно.Dead-time
Если кто не знает, это задержка фронтов сигналов на основном и комплементарном выводах канала таймера. Эта функция есть у некоторых таймеров (смотрите руководство), и нужна она бывает для исключения сквозных токов при управлении силовыми ключами [полу]мостовых схем.
Чт апр 12, 2018 11:09:09
Чт апр 12, 2018 12:08:52
Чт апр 12, 2018 13:09:24