Jump to content
Sign in to follow this  
Стальной

Настройка Кнопки Stm32Vl Discovery

Recommended Posts

Доброго времени суток всем.

Имеется демоплатка сабж, заливаю вот такой код.

#include <iostm32f100xB.h>
void main(void)
{
unsigned long d;

//Enabling clock for GPIOC
RCC_APB2ENR_bit.IOPCEN = 1;
//Configuring GPIO8 and GPIO9 as push-pull output
//refer to datasheet for details
GPIOC_CRH_bit.CNF8 = 0;
GPIOC_CRH_bit.CNF9 = 0;
GPIOC_CRH_bit.MODE8 = 1;
GPIOC_CRH_bit.MODE9 = 1;

GPIOA_CRL_bit.CNF1 = 1;
GPIOA_CRL_bit.MODE1 = 0;

while (1)
{
while ( (GPIOA_IDR_bit.IDR0) );
//switching the LEDs
if (GPIOC_ODR_bit.ODR8)
{
 GPIOC_ODR_bit.ODR8 = 0;
 GPIOC_ODR_bit.ODR9 = 1;
}
else
{
 GPIOC_ODR_bit.ODR8 = 1;
 GPIOC_ODR_bit.ODR9 = 0;
}
//simple delay
for (d=0; d<100000UL; ++d);
}
}

Ожидаемый результат - Светодиоды мигают, пока кнопка отпущена. При нажатии кнопки виснут. Реальность - в регистре IDR всегда 0, мигание есть.

На самом деле, я не могу вообще управлять портом A. Другими порты работают логично. Среда разработки IAR. Там в настройках есть галочка для добавления загрузчика, если ее снимаю - вообще не работает прошивка. Я думаю, может загрузчик как-то блокирует порт.

Помогите решить проблему. Спасибо.

Edited by Стальной

Share this post


Link to post
Share on other sites

Руководство для разработчика приложений на базе STM32WB55

Представив двухъядерные беспроводные микроконтроллеры STM32WB для IoT-приложений, компания STMicroelectronics предлагает разработчикам экосистему, включающую в себя отладочные платы, примеры кода для микроконтроллера, готовое ПО всех уровней и большой массив документации.

Читать статью

Я такого же мнения.

На порт А тактирование не подано, поэтому он и не работает.

Share this post


Link to post
Share on other sites
                     

DC/DC-преобразователи: принципы работы и уникальные решения Maxim Integrated

Что нового можно сказать про DC/DC? Написаны десятки статей, а самостоятельное изготовление преобразователя мощностью от единиц Вт до нескольких кВт даже в домашних условиях не составляет большого труда. Тем не менее, когда речь идет о микро-, или даже нано-ваттах, проектировщик может столкнуться с рядом трудностей. Разработка устройства с батарейным питанием весьма малой мощности – одна из наиболее актуальных и интересных задач во время всепроникающего интернета вещей. А грамотная схемотехника системы питания не возможна без знания основ работы DC/DC преобразователей. Освежить базовые знания и узнать об особенностях проектирования узлов питания мобильного устройства с оптимальным энергопотреблением можно из следующей статьи

Подробнее

Тьфу ты черт. Конечно. Спасибо.

Тогда минимальный вопрос еще. Есть ли программа, которая может дамп флэша сделать, типа ST Visual Programmer?

Share this post


Link to post
Share on other sites

Неа! void EXTI1_IRQHandler(void) воспринимается как обычная функция. Надо как-то указать компилятору, что это обработчик прерывания.

Имеется файлик core_cm3.h, в нём есть что-то похожее, но он не собирается

Share this post


Link to post
Share on other sites

Ну в нее не входит при прерывании. Более того, так как она на прямую не вызывается, ее линковщик даже не компанует.

Share this post


Link to post
Share on other sites

#include <iostm32f100xB.h>
#include "stm32f10x.h"
#include "system_stm32f10x.h"

void EXTI0_IRQHandler( void )
{
 GPIOC_ODR_bit.ODR9 = 1;
 EXTI_PR_bit.PR0 = 1;
}

void main(void)
{
 unsigned long d; 
 //EXTI_PR = 0xFFFF;
 //Enabling clock for GPIOC and GPIOA
 RCC_APB2ENR_bit.IOPCEN = 1;
 RCC_APB2ENR_bit.IOPAEN = 1;
 //Configuring GPIO8 and GPIO9 as push-pull output
 //refer to datasheet for details
 GPIOC_CRH_bit.CNF8 = 0;
 GPIOC_CRH_bit.CNF9 = 0;
 GPIOC_CRH_bit.MODE8 = 1;
 GPIOC_CRH_bit.MODE9 = 1;
 //button pin
 GPIOA_CRL_bit.CNF1 = 1;
 GPIOA_CRL_bit.MODE1 = 0;
 AFIO_EXTICR1_bit.EXTI0 = 1;
 EXTI_RTSR_bit.TR0= 1;
 EXTI_IMR_bit.MR0 = 1;
 //asm( "CPSIE i" );
 NVIC_EnableIRQ(EXTI0_IRQn);
// EXTI_SWIER_bit.SWIER0 = 1;//
 while (1)
 {
   //switching the LED   
   GPIOC_ODR_bit.ODR8 ^= 1;
   for (d=0; d<200000UL; ++d);
 }
}

Так же подгружен ассемблерный файл, правда SystemInit я закомментил.

   MODULE  ?cstartup
    ;; Forward declaration of sections.
    SECTION CSTACK:DATA:NOROOT(3)
    SECTION .intvec:CODE:NOROOT(2)
    EXTERN  __iar_program_start
    EXTERN  SystemInit	   
    EXTERN  main
    EXTERN  EXTI0_i
    PUBLIC  __vector_table
    DATA
__vector_table
    DCD	 sfe(CSTACK)
    DCD	 Reset_Handler			 ; Reset Handler
    DCD	 NMI_Handler			   ; NMI Handler
    DCD	 HardFault_Handler		 ; Hard Fault Handler
    DCD	 MemManage_Handler		 ; MPU Fault Handler
    DCD	 BusFault_Handler		  ; Bus Fault Handler
    DCD	 UsageFault_Handler	    ; Usage Fault Handler
    DCD	 0						 ; Reserved
    DCD	 0						 ; Reserved
    DCD	 0						 ; Reserved
    DCD	 0						 ; Reserved
    DCD	 SVC_Handler			   ; SVCall Handler
    DCD	 DebugMon_Handler		  ; Debug Monitor Handler
    DCD	 0						 ; Reserved
    DCD	 PendSV_Handler		    ; PendSV Handler
    DCD	 SysTick_Handler		   ; SysTick Handler
	 ; External Interrupts
    DCD	 WWDG_IRQHandler			   ; Window Watchdog
    DCD	 PVD_IRQHandler			    ; PVD through EXTI Line detect
    DCD	 TAMPER_IRQHandler			 ; Tamper
    DCD	 RTC_IRQHandler			    ; RTC
    DCD	 FLASH_IRQHandler			  ; Flash
    DCD	 RCC_IRQHandler			    ; RCC
    DCD	 EXTI0_IRQHandler			  ; EXTI Line 0
    DCD	 EXTI1_IRQHandler			  ; EXTI Line 1
    DCD	 EXTI2_IRQHandler			  ; EXTI Line 2
    DCD	 EXTI3_IRQHandler			  ; EXTI Line 3
    DCD	 EXTI4_IRQHandler			  ; EXTI Line 4
    DCD	 DMA1_Channel1_IRQHandler	  ; DMA1 Channel 1
    DCD	 DMA1_Channel2_IRQHandler	  ; DMA1 Channel 2
    DCD	 DMA1_Channel3_IRQHandler	  ; DMA1 Channel 3
    DCD	 DMA1_Channel4_IRQHandler	  ; DMA1 Channel 4
    DCD	 DMA1_Channel5_IRQHandler	  ; DMA1 Channel 5
    DCD	 DMA1_Channel6_IRQHandler	  ; DMA1 Channel 6
    DCD	 DMA1_Channel7_IRQHandler	  ; DMA1 Channel 7
    DCD	 ADC1_IRQHandler			   ; ADC1
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 EXTI9_5_IRQHandler		    ; EXTI Line 9..5
    DCD	 TIM1_BRK_TIM15_IRQHandler	 ; TIM1 Break and TIM15
    DCD	 TIM1_UP_TIM16_IRQHandler	  ; TIM1 Update and TIM16
    DCD	 TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17
    DCD	 TIM1_CC_IRQHandler		    ; TIM1 Capture Compare
    DCD	 TIM2_IRQHandler			   ; TIM2
    DCD	 TIM3_IRQHandler			   ; TIM3
    DCD	 TIM4_IRQHandler			   ; TIM4
    DCD	 I2C1_EV_IRQHandler		    ; I2C1 Event
    DCD	 I2C1_ER_IRQHandler		    ; I2C1 Error
    DCD	 I2C2_EV_IRQHandler		    ; I2C2 Event
    DCD	 I2C2_ER_IRQHandler		    ; I2C2 Error
    DCD	 SPI1_IRQHandler			   ; SPI1
    DCD	 SPI2_IRQHandler			   ; SPI2
    DCD	 USART1_IRQHandler			 ; USART1
    DCD	 USART2_IRQHandler			 ; USART2
    DCD	 USART3_IRQHandler			 ; USART3
    DCD	 EXTI15_10_IRQHandler		  ; EXTI Line 15..10
    DCD	 RTCAlarm_IRQHandler		   ; RTC Alarm through EXTI Line
    DCD	 CEC_IRQHandler			    ; HDMI-CEC
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved
    DCD	 0							 ; Reserved					   
    DCD	 TIM6_DAC_IRQHandler		   ; TIM6 and DAC underrun
    DCD	 TIM7_IRQHandler			   ; TIM7			   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
    THUMB
    PUBWEAK Reset_Handler
    SECTION .text:CODE:REORDER:NOROOT(2)
Reset_Handler
   ; LDR	 R0, =SystemInit
   ; BLX	 R0
    LDR	 R0, =__iar_program_start
    BX	  R0

    PUBWEAK NMI_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler
    B NMI_Handler
    PUBWEAK HardFault_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
HardFault_Handler
    B HardFault_Handler
    PUBWEAK MemManage_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
MemManage_Handler
    B MemManage_Handler
    PUBWEAK BusFault_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
BusFault_Handler
    B BusFault_Handler
    PUBWEAK UsageFault_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
UsageFault_Handler
    B UsageFault_Handler
    PUBWEAK SVC_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
SVC_Handler
    B SVC_Handler
    PUBWEAK DebugMon_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
DebugMon_Handler
    B DebugMon_Handler
    PUBWEAK PendSV_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
PendSV_Handler
    B PendSV_Handler
    PUBWEAK SysTick_Handler
    SECTION .text:CODE:REORDER:NOROOT(1)
SysTick_Handler
    B SysTick_Handler
    PUBWEAK WWDG_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
WWDG_IRQHandler
    B WWDG_IRQHandler
    PUBWEAK PVD_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
PVD_IRQHandler
    B PVD_IRQHandler
    PUBWEAK TAMPER_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TAMPER_IRQHandler
    B TAMPER_IRQHandler
    PUBWEAK RTC_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
RTC_IRQHandler
    B RTC_IRQHandler
    PUBWEAK FLASH_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
FLASH_IRQHandler
    B FLASH_IRQHandler
    PUBWEAK RCC_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
RCC_IRQHandler
    B RCC_IRQHandler
    PUBWEAK EXTI0_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(2)
EXTI0_IRQHandler
    B EXTI0_IRQHandler

    PUBWEAK EXTI1_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
EXTI1_IRQHandler
    B EXTI1_IRQHandler
    PUBWEAK EXTI2_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
EXTI2_IRQHandler
    B EXTI2_IRQHandler
    PUBWEAK EXTI3_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
EXTI3_IRQHandler
    B EXTI3_IRQHandler
    PUBWEAK EXTI4_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
EXTI4_IRQHandler
    B EXTI4_IRQHandler
    PUBWEAK DMA1_Channel1_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel1_IRQHandler
    B DMA1_Channel1_IRQHandler
    PUBWEAK DMA1_Channel2_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel2_IRQHandler
    B DMA1_Channel2_IRQHandler
    PUBWEAK DMA1_Channel3_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel3_IRQHandler
    B DMA1_Channel3_IRQHandler
    PUBWEAK DMA1_Channel4_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel4_IRQHandler
    B DMA1_Channel4_IRQHandler
    PUBWEAK DMA1_Channel5_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel5_IRQHandler
    B DMA1_Channel5_IRQHandler
    PUBWEAK DMA1_Channel6_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel6_IRQHandler
    B DMA1_Channel6_IRQHandler
    PUBWEAK DMA1_Channel7_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
DMA1_Channel7_IRQHandler
    B DMA1_Channel7_IRQHandler
    PUBWEAK ADC1_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
ADC1_IRQHandler
    B ADC1_IRQHandler
    PUBWEAK EXTI9_5_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
EXTI9_5_IRQHandler
    B EXTI9_5_IRQHandler
    PUBWEAK TIM1_BRK_TIM15_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM1_BRK_TIM15_IRQHandler
    B TIM1_BRK_TIM15_IRQHandler
    PUBWEAK TIM1_UP_TIM16_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM1_UP_TIM16_IRQHandler
    B TIM1_UP_TIM16_IRQHandler
    PUBWEAK TIM1_TRG_COM_TIM17_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM1_TRG_COM_TIM17_IRQHandler
    B TIM1_TRG_COM_TIM17_IRQHandler
    PUBWEAK TIM1_CC_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM1_CC_IRQHandler
    B TIM1_CC_IRQHandler
    PUBWEAK TIM2_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM2_IRQHandler
    B TIM2_IRQHandler
    PUBWEAK TIM3_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM3_IRQHandler
    B TIM3_IRQHandler
    PUBWEAK TIM4_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM4_IRQHandler
    B TIM4_IRQHandler
    PUBWEAK I2C1_EV_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
I2C1_EV_IRQHandler
    B I2C1_EV_IRQHandler
    PUBWEAK I2C1_ER_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
I2C1_ER_IRQHandler
    B I2C1_ER_IRQHandler
    PUBWEAK I2C2_EV_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
I2C2_EV_IRQHandler
    B I2C2_EV_IRQHandler
    PUBWEAK I2C2_ER_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
I2C2_ER_IRQHandler
    B I2C2_ER_IRQHandler
    PUBWEAK SPI1_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
SPI1_IRQHandler
    B SPI1_IRQHandler
    PUBWEAK SPI2_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
SPI2_IRQHandler
    B SPI2_IRQHandler
    PUBWEAK USART1_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
USART1_IRQHandler
    B USART1_IRQHandler
    PUBWEAK USART2_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
USART2_IRQHandler
    B USART2_IRQHandler
    PUBWEAK USART3_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
USART3_IRQHandler
    B USART3_IRQHandler
    PUBWEAK EXTI15_10_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
EXTI15_10_IRQHandler
    B EXTI15_10_IRQHandler
    PUBWEAK RTCAlarm_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
RTCAlarm_IRQHandler
    B RTCAlarm_IRQHandler
    PUBWEAK CEC_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
CEC_IRQHandler
    B CEC_IRQHandler
    PUBWEAK TIM6_DAC_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM6_DAC_IRQHandler
    B TIM6_DAC_IRQHandler
    PUBWEAK TIM7_IRQHandler
    SECTION .text:CODE:REORDER:NOROOT(1)
TIM7_IRQHandler
    B TIM7_IRQHandler			   
    END

Происходит переход по вектору прерывания вот сюда

B EXTI0_IRQHandler

Но сама функция так и не вызывается, просто висит на этой строке

Share this post


Link to post
Share on other sites

Сделал как написано http://we.easyelectronics.ru/STM32/stm32-vldiscovery-moy-variant-bystrogo-starta.html

файл core_cm3.h из скачанных не хотел собираться, заменил на один из тех, что шел в комплекте с iar, плюс он потребовал еще два файлика. Их подсунул.теперь прерывания есть и обработчик вызывается, но я не могу понять, где проблема в предыдущем случае. Ассемблерный файл такой же вроде как.

В таком варианте мне непривычна структура описания регистров, под восьмыми я приучился к варианту описания иар.

Share this post


Link to post
Share on other sites

Дабы не создавать новую тему, спрошу здесь. Изучаю ARM на плате stm32lDiscovery, дошел до кнопки. Сделал, чтобы при нажатии кнопки загорались два светодиода, а при отпускании - тухли. Можно ли как нибудь сделать, чтобы при зажатии кнопки зажигались два светодиода, но через 2 секунды один погас?

post-178186-0-90311800-1462818599.png

Edited by (dima)

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...