STM32 day4

ST-LINK有时不能下载:no target connected

网上方法:最近在使用stm32f4-discovery 板子时,偶然间遇到st-link no target connected的问题,本来一直都很正常,突然就冒出这个问题,我一开始以为是板子出毛病了。后来上网查阅了资料后才发现不是板子的问题。解决办法如下:(开发环境是 MDK 4.6)

显示“NO target connected“ 但是驱动没有问题 在设备管理器中海显示出有stlink
原因是配置了GPIOA的 14 13这两个口了

GPIOA_MODER复位后的值为:0x2800 0000,即将GPIO13\14配置为复用模式,但为什么在程序配置了GPIO13\14为输出,并且在目标芯片有复位的情况下也会引起SWD无法仿真、下载的问题。

解决办法:

1、先确认目标板上电。
2、先长按住目标板上的复位键,再点击 Settings,再松开目标板上的复位键。
3、此时KEIL打开Settings的设置对话框,请确认有SWD的内容后,再进行下一步。
4、将STM32F41Discovery板断电,重新上电。
5、先长按STM32F4Discovery的复位键,再点击仿真或者下载按钮,再松开复位键。
注:这里点仿真到松开复位键不是每一次都能成功,每次点了仿真键到松开复位键的时间每次都不同,在某一个点时,就可以进入仿真或者下载程序了。板子就恢复正常了。但需要注意的是,在程序里一定要避开对GPIO13\GPIO14的配置。

注意:松开复位键 需要感觉的 太短或者太长都不可以的 。需要多次试验才能够成功。


EXTI中断

EXTI->PR = 1 << 4;  //清除中断标志,写1清除

当在外部中断线上发生了选择的边沿事件,该位被置’1’。在该位中写入’1’可以清除它,也可以通过改变边沿检测的极性清除。

STM32中断优先级理解及先占优先级和从优先级(转)


TIM通用定时器

8M通过倍频器到72M。
不直接用72M晶振:防止干扰。

//定时器3初始化
void TIM3_Init(char clock,int Preiod)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  //打开时钟

    TIM_DeInit(TIM3);

    TIM_TimeBaseStructure.TIM_Period = Preiod;
        //预分频系数为36000-1,这样计数器时钟为72MHz/36000 = 2kHz
    TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
    TIM_ClearFlag(TIM3,TIM_FLAG_Update);

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
    TIM_Cmd(TIM3,ENABLE);
}

USART

应用场合:
1、芯片之间的近距离通信
2、与PC机之间的通信
3、模块之间的远距离通信

异步串行通信协议:
1、起始位
2、数据位(8、9) 9奇偶校验位
3、奇偶校验位(9位)
4、停止位(1、1.5、2 )
5、波特率设置(速度)

USART1模块的设置:UE位使能、M位来定义字长、STOP停止位的位数、TE位使能、BBR寄存器选择要求的波特率。

void UART1_init(u32 pclk2,u32 bound)
{    
    float temp;
    u16 mantissa;
    u16 fraction;      
    temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
    mantissa=temp;               //得到整数部分
    fraction=(temp-mantissa)*16; //得到小数部分    
    mantissa<<=4;
    mantissa+=fraction; 
    RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
    RCC->APB2ENR|=1<<14;  //使能串口时钟 
    GPIOA->CRH&=0XFFFFF00F;//IO状态设置
    GPIOA->CRH|=0X000008B0;//IO状态设置
    RCC->APB2RSTR|=1<<14;   //复位串口1
    RCC->APB2RSTR&=~(1<<14);//停止复位        
    //波特率设置
    USART1->BRR=mantissa; // 波特率设置   
    USART1->CR1|=0X200C;  //1位停止,无校验位.
    USART1->CR1|=1<<8;    //PE中断使能
    USART1->CR1|=1<<5;    //接收缓冲区非空中断使能         

    UART1NVIC_Configuration();//中断配置
}

void UART1NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure; 
        /* Enable the USART1 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
                                                     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值