Confesso que tentei usar algo como uma biblioteca pronta (de fato , algum exemplo pronto) mas pqp... É uma complicação só
só pra setar 1 bit de um registro chama funções a rodo. E de novo.. me perdi no emaranhado de coisas.
Mas se a lib que se refere é algo como o conteúdo da pasta include st, sim já estou a usar...
#include "C:\Arquivos de programas\IAR Systems\Embedded Workbench 7.5\arm\inc\ST\iostm32f10xxB.h"
Ela e uma leitura do reference manual me iluminaram um pouco. Mas antes de dominar o mundo só quero fazer um pisca led. Eu quero! eu quero! eu quero! Será que é tão difícil??!!
- Código: Selecionar todos
#define led GPIOA_ODR_bit.ODR11
//__irq int timer2(void);
unsigned int i;
void TIM2_IRQHandler()
{
// TIM2_CR1_bit.URS=0;//reset da interrupt
// TIM2_SR_bit.TIF=0;//reset da interrupt
TIM2_SR_bit.UIF=0;//reset da interrupt
led^=1;
i++;
}
O setup do timer 2
- Código: Selecionar todos
void setuptimer2int()
{
TIM2_CR1=0;
TIM2_CR2=0;
TIM2_SMCR=0;
TIM2_DIER=0;
TIM2_SR=0;
TIM2_EGR=0;
TIM2_CCMR1=0;
TIM2_CCMR2=0;
TIM2_CCER=0;
TIM2_CNT=0;
TIM2_PSC=0;
TIM2_ARR=0xffff;
TIM2_CCR1=0;
TIM2_CCR2=0;
TIM2_CCR3=0;
TIM2_CCR4=0;
TIM2_DCR=0;
TIM2_DMAR=0;
TIM2_CR1_bit.CEN=0;//desab. contador
TIM2_PSC=0x00;//32; //prescaler
TIM2_ARR=0x01;//0xfff8; //auto reload
RCC_APB1ENR_bit.TIM2EN=1; //libera clock no timer 2
TIM2_CR1_bit.CEN=1;//aciona contador
TIM2_CR1_bit.DIR=0;//down count
TIM2_DIER_bit.UIE=1;//hab interupt
TIM2_CNT=0;
}
Do clock...
- Código: Selecionar todos
void SystemClock_Config(void)
{
/**Initializes the CPU, AHB and APB busses clocks
*/
RCC_CR_bit.HSION=1;// liga clock
//while(!RCC_CR_bit.HSIRDY); //espera estabilizar
RCC_CFGR_bit.MCO=0x07; //SYSCLK
//RCC_CFGR_bit.SW=0x00; //HSI
RCC_CSR_bit.LSION=1; //interno 40Khz
RCC_APB2ENR=0xffffffff; //clock em tudo
RCC_APB1ENR_bit.TIM2EN=1; //clock no timer 2 ... quase tudo
RCC_APB1ENR=0xffffffff; //agora sim .. tudo mesmo
}
Mas infelizmente o contador do timer2 TIM2_CNT se recusa a contar
O main()
- Código: Selecionar todos
int main()
{
SystemClock_Config();
setupports();
setuptimer2int();
//__enable_interrupt();
for(;;)
{
GPIOB_ODR^=0xffffffff; //sim ... isto acontece de boa
}
}
Algo ocorre sim pois consigo ver a GPIOB alternar no simulador
Bem... foi só um desabafo digital 1/2 sem graça. Mas depois de velho apanhar de 1 bit ... tá feia a coisa... Caso já tenhas escovado bits com este mc,... já sabe
abç.