STM32
文章平均质量分 67
绿枯草
这个作者很懒,什么都没留下…
展开
-
浅析IMU代码
IMU的代码的引自https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/imumargalgorithm30042010sohm/IMU.zip 1 //================================================================转载 2017-07-11 08:46:27 · 5194 阅读 · 4 评论 -
NSS管脚信号
NSS管脚信号作为主设备NSS管脚为高电平。从设备NSS管脚为低电平。当NSS为低电平时,该SPI设备被选中,可以和主机通讯。输入就是NSS管脚信号给自己。输出就是NSS管脚信号送出去。软件输入:NSS分为内部管脚和外部管脚,通过设置spi_cr1寄存器的ssm位和ssi位都为1可以设置NSS管脚为软件输入模式且内部管脚提供的电平为高电平,其中SSM位为原创 2017-07-07 21:41:53 · 3010 阅读 · 0 评论 -
SPI配置
//SPI配置MISO主设备数据输入,从设备数据输出MOSI主设备数据输出,从设备数据输入SCLK时钟信号,由主设备产生CS从设备片选信号,由主设备控制1.配置相关引脚的复用功能,使能SPI时钟(APB1)2.初始化SPI,设置SPI工作模式void SPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef* SPI_InitS原创 2017-07-08 08:25:26 · 3942 阅读 · 0 评论 -
assert_param()的使用
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_转载 2017-07-08 08:58:08 · 2358 阅读 · 0 评论 -
24L01配置函数详解
//检测24l01是否存在//返回值0成功,1失败u8 NRF24L01_Check(void){ u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5}; u8 i; SPI2_SetSpeed(SPI_BaudRatePrescaler_4); //spi速度9Mhz(24l01的最大SPI时钟为10Mhz) NRF24L01_Write_原创 2017-07-09 10:04:54 · 5324 阅读 · 0 评论 -
欧拉角与万向节死锁
首先来看一下什么是欧拉角(Euler angles)?构件在三维空间中的有限转动,可依次用三个相对转角表示,即进动角、章动角和自旋角,这三个转角统称为欧拉角。——引自百度百科莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向。对于任何一个参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。所以,刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于转载 2017-07-09 15:22:08 · 1434 阅读 · 0 评论 -
STM32中的几个时钟SysTick、FCLK、SYSCLK、HCLK
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①、HSI是高速内部时钟,RC振荡器,频率为8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接 外部时钟源,频率范围为4MHz~16MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④、LSE是低速外部时钟,接频率为32.76转载 2017-07-18 15:12:28 · 1325 阅读 · 0 评论 -
STM32的SYSTICK详解
什么是SYSTICK:这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。作用:在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系统崩溃。要解决这个问题,转载 2017-07-18 15:19:48 · 4106 阅读 · 0 评论 -
输入捕获模式
异或那块先不管他,好像跟编码器有关,输入有个特色就是可以把TI的输入搞到CC1上去,也可以把T2的输入搞到CC1上去,其实也可以把T1搞到CC1上去同时把T1搞到CC2上去,这样就有了后来的PWM输入。 输出上的特色是不直接输出,而是有个OC1REF,这样可以定义高有效还是低有效,输出自己需要的有效电平。 复位门控 触发 所谓从模式简单理解就是受控于别人了,包括何时启动、何原创 2017-07-22 14:41:45 · 3807 阅读 · 0 评论 -
确定PWM频率
TIM3的ARR寄存器和PSC寄存器,确定PWM频率。PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,这时的TIMx时钟为72MHz,用这个TI转载 2017-07-06 17:01:58 · 6992 阅读 · 0 评论 -
STM32接口FSMC/FMC难点的理解
一,FSMC简 FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。二,FSMC存储块STM32F767的FMC将外部存储器划分为6个固定大小的256M的存储区域,如下图原创 2017-07-27 09:34:51 · 44691 阅读 · 15 评论 -
referred from timer.o
Error: L6218E: Undefined symbol TIM_ClearITPendingBit (referred from stm32f10x_it.o). Error: L6218E: Undefined symbol TIM_GetITStatus (referred from stm32f10x_it.o). Error: L6218E: Undefined s原创 2017-07-07 17:42:22 · 4823 阅读 · 0 评论 -
使用Timer3实现两路(可四路)PWM波形的输出
调试芯片:STM32F103C8T6外部晶振:8MHz功能介绍:使用Timer3实现两路(可四路)PWM波形的输出代码如下: 初始化:系统时钟初始化,GPIO端口初始化,Timer初始化系统时钟初始化: /* 配置系统时钟为72M */ SystemInit(); GPIO端口初始化:/****************转载 2017-07-06 22:42:22 · 5740 阅读 · 1 评论 -
陀螺仪mpu6050的调试与dmp库的移植经历
通过三天的痛苦挣扎终于调通了mpu以及移植好了dmp库一开始动手使用mpu6050的时候移植了一个例程想试下效果不曾想调用dmp的时候就出错了,然后尝试了各种方法试图定位错误,一开始怀疑模拟IIC有问题,然后仔细核对了一下IIC的时序例程程序://MPU IIC 延时void MPU_IIC_Delay(void){ delay_us(2);}//产生II起始信号原创 2017-07-15 20:12:25 · 35005 阅读 · 2 评论 -
外部中断的配置
//中断映射EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line4;//中断线EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//(中断模式(EXTI_Mode_Event))//EXTI_Mode_Event//外部事件模式是不产生原创 2017-07-04 15:21:56 · 3026 阅读 · 0 评论 -
串口的设置
//串口的设置1.串口使能,GPIO时钟使能2.串口复位3.GPIO端口模式设置4.串口参数初始化5.开启中断并且初始化NVIC(如果需要开启中断)6.使能串口7.编写中断处理函数//串口时钟使能(APB2)RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);//串口复位void USART_DeIni原创 2017-07-04 20:28:47 · 2248 阅读 · 0 评论 -
STM32(Cortex-M3)中的优先级理解
STM32(Cortex-M3)中的优先级理解很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——配置优先级分组方式,会很不理解,尤其是看中文翻译版的,因为中文翻译版里把这里翻译成“先占优先级和从优先级”这样翻译其实是不对的,很容易让人误解。为了便于大家理解,有必要先解释两个概念:抢占式优先级/响应优先级: STM32(转载 2017-07-05 08:23:31 · 1279 阅读 · 0 评论 -
串口1中断服务函数的解析
//串口1中断服务函数的解析void USART1_IRQHandler(void) u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收到的数据必须是0x0d 0x0a结尾,RESET=0{Res =USART_ReceiveData(USART1);转载 2017-07-05 09:43:58 · 22399 阅读 · 2 评论 -
通用定时器
//通用定时器TIM3TIM3挂载在APB1//TIM3时钟使能RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//初始化定时器参数,设置自动重装值,分频系数,计数方式定时器的初始化参数void TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef* TIM原创 2017-07-05 15:43:09 · 1269 阅读 · 0 评论 -
通用定时器的原理
/通用定时器的原理stm32有多达8个定时器,有2个高级定时器TIM1和TIM8(常用于三相电机的驱动)时钟由APB2产生。其他的TIM2-7为普通定时器,时钟由APB1的输出产生。看时钟数的图可以看出定时器的时钟来自于输入APB1或APB2的一个倍频器。当APB的预分频系数不等于1时才起作用,这时时钟频率就等于APB的频率的两倍。举例:假定AHB=36MHz,原创 2017-07-05 16:07:54 · 1322 阅读 · 0 评论 -
TIM_ClockDivision的认识
定时器计时,在目标中的波形(例子)TIM_ClockDivisionTIM_ClockDivision设置了时钟分割。该参数取值见下表。如图1,TIM_ClockDivision的作用是做一段延时,一般在特殊场合的时候会用到。如下图所示:TIM_ClockDivision的作用就是在未分频之前 根据要求建立新的分频器,确定定时器,确定一定的延转载 2017-07-05 16:13:21 · 11455 阅读 · 2 评论 -
有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
以及上拉输入、下拉输入、浮空输入、模拟输入的区别最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出转载 2017-07-05 20:59:00 · 906 阅读 · 0 评论 -
PWM(脉宽调制)
PWM(脉宽调制)占空比:pwm占空比就是一个脉冲周期内高电平的所整个周期占的比例。例如1秒高电平1秒低电平的PWM波占空比是50%。TIM6和TIM7:不可以产生pwm输出TIM1和TIM8:7路的PWM输出其余TIM:4路PWM输出控制PWM的三个寄存器捕获/比较模式寄存器(TIMx_CCMR1/2)捕获/比较使能寄存器(TIMx_CCER)捕获原创 2017-07-06 16:43:47 · 19093 阅读 · 0 评论 -
pwm频率和占空比的区别
PWM的频率是指每秒钟信号从高电平到低电平再回到高电平的次数,占空比是高电平持续时间和低电平持续时间之间的比例。PWM的频率越高,其对输出的响应就会越快,频率越低输出响应越慢。原创 2017-07-06 16:55:08 · 12025 阅读 · 0 评论 -
模拟 模拟/ 数字转换(ADC)
一,ADC介绍12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。1、1原创 2017-07-28 09:49:00 · 12267 阅读 · 0 评论