Спасибо. Еще вопрос - какую max частоту можно получить с ШИМа на STM32F103C8T6 при 72 Мгц тактовой? У меня получилось 36 МГц.
Код: Выделить всё
TIM1->PSC = 0;
TIM1->ARR = 1;Или как-то можно вывести 72 МГц?
Код: Выделить всё
TIM1->PSC = 0;
TIM1->ARR = 1;Код: Выделить всё
for(uint32_t i;;)
{
GPIOA->ODR=i++;
}
Код: Выделить всё
LDR.N R1,??main_0 ;; 0x4001080c
??main_1:
STR R0,[R1, #+0]
ADDS R0,R0,#+1
B.N ??main_1
Код: Выделить всё
for(GPIO::PA_1 pin;;)
{
pin=1;
pin=0;
}Код: Выделить всё
MOV R0,#+131072
LDR.N R1,??main_0 ;; 0x40010810
MOV R2,#+131074
??main_1:
STR R2,[R1, #+0]
STR R0,[R1, #+0]
B.N ??main_1
Код: Выделить всё
for(GPIO::PA_0 pin;;)
{
pin=1;
__NOP(); __NOP();
pin=0;
}
Код: Выделить всё
void Dryg()
{
GPIO::PA_0::set();
__NOP();
GPIO::PA_0::clear();
__NOP();
}
int main()
{
for(;;)
{
Repeat<Dryg,50>();
}
}
Код: Выделить всё
main:
MOV R0,#+65536
LDR.N R1,??DataTable1 ;; 0x40010810
MOVS R2,#+1
??main_0:
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
STR R2,[R1, #+0]
Nop
STR R0,[R1, #+0]
Nop
B.N ??main_0
Код: Выделить всё
void MCO_out (void){
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for port A
GPIOA->CRH &= ~GPIO_CRH_CNF8_0; // setting out alternative push-pull for PA8
GPIOA->CRH |= GPIO_CRH_CNF8_1;
GPIOA->CRH |= (GPIO_CRH_MODE8_0 | GPIO_CRH_MODE8_1); // gpio speed 50 MHz
RCC->CFGR |= RCC_CFGR_MCO_SYSCLK ;// HSE; PLL; SYSCLK; // select source clokc SYSCLK
}Код: Выделить всё
Brightness = 100;
NVIC_EnableIRQ(TIM3_IRQn);
TIM3->PSC = 153;
TIM3->ARR = 255;
TIM3->DIER |= TIM_DIER_UIE //*!<Update interrupt enable */
| TIM_DIER_CC1IE; //*!<Capture/Compare 1 interrupt enable */
TIM3->CCR1 = Brightness; //*!< TIM capture/compare register 1, */
TIM3->CR1 |= TIM_CR1_CEN; Код: Выделить всё
void TIM3_IRQHandler (void)
{
if(TIM3->SR & TIM_SR_UIF == TIM_SR_UIF){
TIM3->SR = 0;
GPIOA->BSRR |= BS(10); // поднимим ножку
}
if(TIM3->SR & TIM_SR_CC1IF == TIM_SR_CC1IF){
TIM3->SR =0;
GPIOA->BSRR |= BR(10); //опустим ножку
}
}И еще, сбрасывайте тот флаг, который обрабатываете..
А вообще, можно этот вывод сделать аппаратно и не нужно будет никаких прерываний
Код: Выделить всё
if((TIM3->SR & TIM_SR_UIF) == TIM_SR_UIF)Код: Выделить всё
if(TIM3->SR & TIM_SR_UIF)Код: Выделить всё
#define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */
#define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */
#define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */
#define RCC_CFGR_MCO_PLLCLK_Div2 ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */Чёрт, только сейчас, хорошо присмотревшись, вижу разницу BS/BR.VladislavS писал(а):И всё таки он разный
Ошибка в приоритете операций & и ==.
Да можно. Только зачем и что он оттуда прочтёт.
When the System Clock is selected to output to the MCO pin, make sure that this clock
does not exceed 50 MHz (the maximum IO speed).