Keil&stm32 工程建立标准

这里之所以有8 个启动文件,是因为对于不同容量的芯片启动文件不一样。对于 103 系列,主要是用其中3 个启动文件: 
startup_stm32f10x_cl.s             互联型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s            大容量的STM32F101xx,STM32F102xx,                                                          STM32F103xx
startup_stm32f10x_hd_vl.s       大容量的STM32F100xx
startup_stm32f10x_ld.s             小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s        小容量的STM32F100xx
startup_stm32f10x_md.s           中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s      中容量的STM32F100xx  
startup_stm32f10x_xl.s             FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_hd_vl.s       大容量的STM32F100xx

ps:
cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度产品,stm32f101/103系列
ld:低密度产品,FLASH小于64K
md:中等密度产品,FLASH=64 or 128

hd:高密度产品,FLASH大于128

项目场景:

使用中断前,清除相应中断标志位(定时向上更新中断

    /*------使用更新中断前,清除中断标志位,避免错误-------*/


问题描述

void TIM5_Int_Init(u16 arr,u16 psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); 
	
    TIM_TimeBaseInitStructure.TIM_Period = arr;   //自动重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //定时器分频
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; 
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);
	TIM_ClearITPendingBit(TIM5, TIM_IT_Update); 
    /*------使用更新中断前,清除中断标志位,避免错误-------*/
	TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE); 
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
	NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; 
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; 
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
}

项目场景:

     在数据间进行赋值时,注意被赋值的数据组是否大于赋值的数组。如下图若 rfid[8] 的值大于17,则在赋值 ICA_rfid[] 时,会出现地址越界


问题描述

int Init_Casepart_para(u8 name, update_casedata *Update_casedata, cJSON *Casepart)
{
    u8 ICA_i;
    u8 ICA_rfid[17]={0};

    u8 ICA_c =rfid[8];  //若 rfid[8] 的值大于17,则在赋值 ICA_rfid[] 时,会出现地址越界
    if (ICA_c > 8)  { ICA_c = 8; }

    for (ICA_i = 0; ICA_i < ICA_c; ICA_i++)
    {
        ICA_rfid[ICA_i * 2] = ICA_a;
        ICA_rfid[ICA_i * 2 + 1] = ICA_b;
    }
    return 0;
}

STM32F103C8--CAN设置:

STM32F103C8--CAN设置:

CAN总线波特率的设定——以STM32为例_HW_Guo的博客-CSDN博客_can总线波特率一般采用多少


    u32 ext_id =0x00000000 | sw_in; 
   /**************50K**************/
	can1.CAN_SJW = CAN_SJW_1tq;       //f1的can时钟为36M
	can1.CAN_BS1 = CAN_BS1_6tq;    
	can1.CAN_BS2 = CAN_BS2_8tq;
	can1.CAN_Prescaler = 4*12;        //分频系数  36/((8+6+1)*48) = 0.010M=50k --- 波特率
  /**************250K**************/
	can2.CAN_SJW  = CAN_SJW_1tq;  /* f1的can时钟为36M */    
	can2.CAN_BS1  = CAN_BS1_7tq;
	can2.CAN_BS2  = CAN_BS2_8tq;  
	can2.CAN_Prescaler = 9;       /* 36/((8+7+1)*9) = 0.25M=250k ---波特率 */ 
    /**************500K**************/
	can1.CAN_Mode = mode; //=1  //工作模式为环回模式 CAN_Mode_Normal=0	
	can1.CAN_SJW = CAN_SJW_1tq;        //f1的can时钟为36M
	can1.CAN_BS1 = CAN_BS1_6tq;      
	can1.CAN_BS2 = CAN_BS2_1tq;
	can1.CAN_Prescaler = 9;   //分频系数   36/((1+6+1)*9) = 0.10M=500k --- 波特率(采样率87.5)
                              //我们还需要设置APB1的时钟频率,STM32F1通常为36MHz (外部8M晶振)
    can_filter.CAN_FilterNumber=0;                    //使用筛选器0,范围为0~13
	can_filter.CAN_FilterMode=CAN_FilterMode_IdMask;  //设置过滤器组0为屏蔽模式
	can_filter.CAN_FilterScale=CAN_FilterScale_32bit; //设置过滤器组0位宽为32位 
	
    /**************扩展帧--29位标识符**************/
	can_filter.CAN_FilterIdHigh=((ext_id<<3) >>16) &0xffff;      //32位ID筛选器的标识符
	can_filter.CAN_FilterIdLow=((u16)(ext_id<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;//只接收标 
                                                             识符ID是0x0002的数据
	
	/**************标准帧--11位标识符**************/
	can_filter.CAN_FilterIdHigh=(ext_id<<5) &0xFFE0;               //32位ID筛选器的标识符
	can_filter.CAN_FilterIdLow=(CAN_ID_STD|CAN_RTR_DATA)&0xFFFF;   //只接收标识符ID是 
                                                                        0x0002的数据

	can_filter.CAN_FilterMaskIdHigh=0xffff;               //32位Mask筛选器的标识符
	can_filter.CAN_FilterMaskIdLow=0xffff;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值