#include <stm32f4xx.h> #include "other_stuff.h" #define APB1_FREQ 42000000 // Clock driving TIM3 #define CNT_FREQ 21000000 // TIM3 counter clock (prescaled APB1) #define IT_PER_SEC 2000 // Interrupts per second #define TIM3_PULSE ((CNT_FREQ) / (IT_PER_SEC)) // Output compare reg value #define TIM_PRESCALER (((APB1_FREQ) / (CNT_FREQ))-1) // APB1 prescaler uint16_t current_count = 0; // To sample the counter static void TIM3_Config(void); int main() { TIM_TimeBaseInitTypeDef TIM3_TimeBase; // Time base structure TIM_OCInitTypeDef TIM3_OC; // Output Compare structure TIM3_Config(); TIM3_TimeBase.TIM_ClockDivision = 0; // Not dividing TIM3_TimeBase.TIM_CounterMode = TIM_CounterMode_Up; // Upcounting configuration TIM3_TimeBase.TIM_Period = 65535; // Autoreload value (ARR) TIM3_TimeBase.TIM_Prescaler = TIM_PRESCALER; // Dividing APB1 by 2 TIM_TimeBaseInit(TIM3, &TIM3_TimeBase); // Initializing Time Base structure TIM3_OC.TIM_OCMode = TIM_OCMode_Toggle; // Output compare toggling mode TIM3_OC.TIM_OutputState = TIM_OutputState_Enable; // Enabling the Output Compare state TIM3_OC.TIM_OCPolarity = TIM_OCPolarity_Low; // Reverse polarity TIM3_OC.TIM_Pulse = TIM3_PULSE; // Output Compare 1 reg value TIM_OC1Init(TIM3, &TIM3_OC); // Initializing Output Compare 1 structure TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable); // Disabling Ch.1 Output Compare preload TIM_Cmd(TIM3, ENABLE); // Ready, Set, Go! TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE); // Enabling TIM3 Ch.1 interrupts while(1) { //os_sys_init(init_task); // Starting the RTX kernel } } static void TIM3_Config(void) { GPIO_InitTypeDef gpio_C; // GPIOC structure NVIC_InitTypeDef NVIC_TIM3; // NVIC structure RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); // Clocking GPIOC (AHB1 = 84MHz) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // Clocking TIM3 (APB1 = 42MHz) gpio_C.GPIO_Pin = GPIO_Pin_6; // Ch.1 (PC6) gpio_C.GPIO_Mode = GPIO_Mode_AF; // Alternative function gpio_C.GPIO_Speed = GPIO_Fast_Speed; // 50MHz gpio_C.GPIO_OType = GPIO_OType_PP; // Push-pull gpio_C.GPIO_PuPd = GPIO_PuPd_UP ; // Pulling-up GPIO_Init(GPIOC, &gpio_C); // Initializing GPIOC structure GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); // Routing TIM3 output to PC6 NVIC_TIM3.NVIC_IRQChannel = TIM3_IRQn; // Specifying the channel (stm32f4xx.h) NVIC_TIM3.NVIC_IRQChannelPreemptionPriority = 0; // Only matters for multiple interrupts NVIC_TIM3.NVIC_IRQChannelSubPriority = 0; // Only matters for multiple interrupts NVIC_TIM3.NVIC_IRQChannelCmd = ENABLE; // Enabling global interrupt NVIC_Init(&NVIC_TIM3); // Initializing NVIC structure } void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET) // Just a precaution (RESET = 0) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); // Clear TIM3 Ch.1 flag current_count = TIM_GetCapture1(TIM3); // Get current counter value TIM_SetCompare1(TIM3, current_count + TIM3_PULSE); // Set Output Compare 1 to the new value } }
Ярлыки
_GetPixelIndex
(1)
_SetPixelIndex
(1)
3-phase
(1)
800x480
(1)
АЦП
(1)
генератор
(1)
синхронный усилитель
(2)
структура
(1)
учебный курс
(1)
шаговый двигатель
(1)
ШИМ
(2)
accert
(1)
AD7608
(1)
AD8429
(1)
ADC
(5)
amplifer
(1)
arccos
(1)
arcsin
(1)
arctang
(2)
arctg
(3)
ARM
(2)
arm_sqrt_q15
(2)
assembler
(6)
ASSERT
(1)
atan
(2)
bit
(1)
Bitband
(1)
boot
(3)
bootlloader
(1)
BUTTON
(1)
C
(5)
C#
(1)
CAN
(2)
CC2530
(5)
CMSIS
(4)
command
(1)
Cordic
(1)
Core746I
(1)
CubeMX
(4)
DBGMCU
(2)
debug
(2)
debug.ini
(1)
delegate
(1)
Digital Potentiometers
(1)
DigitalPOT
(1)
Discovery
(1)
DMA
(9)
DMA2D
(1)
DSP
(1)
DSP library
(1)
DWT
(1)
EFM32
(5)
EmWin
(9)
EXTI
(1)
FATFS
(1)
FMC
(2)
FreeRTOS
(2)
gl868-dual cmux
(1)
GPIO
(4)
GUI
(2)
GUIBuilder
(1)
GUIDRV_CompactColor_16
(1)
HAL
(3)
HappyGecko
(1)
Hard Fault
(2)
heap
(1)
I2C
(1)
ID
(1)
ILI9320
(1)
ILI9325
(1)
Initialisation
(1)
InitLTDC
(1)
Instrumentithion
(1)
Interrupt
(4)
ITR
(1)
JTAG
(1)
Keil
(5)
LCDConf
(2)
lock-in
(1)
LTCD
(1)
LTDC
(3)
main
(1)
memory
(1)
MINI_STM32 Revision 01
(1)
nBoot0
(1)
NVIC
(1)
OnePulse
(2)
OSAL
(4)
pack
(1)
phase
(1)
printf
(3)
Pulse
(1)
PWM
(12)
RCC
(2)
RCR
(1)
Register
(1)
RESET
(2)
RS232
(3)
RSS
(1)
RTC
(3)
RTOS-RTX
(1)
RTT
(1)
RTX-RTOS
(1)
SDCard
(1)
SDRAM
(6)
Segger
(2)
SPI
(3)
sqrt
(3)
SSD1298
(1)
SSD1963
(1)
Standart Peripherial Library
(3)
STANDBAY
(1)
startup
(1)
STemWin
(8)
stepper motor
(1)
STlink
(2)
STM32
(17)
STM32429ZI
(1)
STM32Cube
(1)
STM32DBG.IN
(1)
STM32F
(28)
STM32F0
(4)
STM32F1
(13)
STM32F4
(10)
STM32F4 Discovery
(1)
STM32F407ZG
(1)
STM32F429
(2)
STM32F746
(1)
STOP
(1)
string
(1)
struct
(1)
SWD
(1)
SWD JTAG
(1)
Synhronization
(1)
system_stm32f4xx.c
(1)
SystemInit
(1)
SysTick
(1)
task
(4)
telit
(1)
TIM
(27)
typedef
(1)
UART
(1)
USART
(9)
viewer
(2)
WM_PAINT
(1)
Z-stack
(5)
ZigBee
(5)
пятница, 25 декабря 2015 г.
STM32F4 Timers for Periodic Interrupts
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий