四旋翼飞行器学习笔记
还记得很久很久以前,有幸在学校认识把无人机从大学玩到公司的老司机,当时觉得哇塞,自己做个无人机好牛逼,于是,一颗对飞行的赤诚之心在梦想里萌芽,当时在社团找到一块小四轴的PCB,当时的我,可谓是菜到一种境界,连电阻电容都不认识的人或许是因为那块PCB颜色好看,找学长要了一个,于是,或许……从那是开始,还是想学习一下四旋翼这个方向,然后……..好像很久很久都没有这棵种子并没有得到灌溉,最近,算是真的下定绝心了吧,不求它长成一棵参天大树,但至少也得让我看见小树苗吧,哈哈哈。
遥控器部分
好像对于商用的一些东西,有很多可能我们认为并不重要的东西,当涉及到利益的时候,可能有很多的东西并不能简单的CTRL C+V的白嫖 我们很少注意到这一点
1 | 版权所有,盗版必究!! |
遥控器大致思路
遥控器采用STM32F103C8T6单片机作为主控芯片,使用SPI通信的NRF24L01进行单向数据传输,(或许是为了节约成本)使用单片机内部时钟,用定时器定时采集ADC通道的ADC值,通过DMA直接搬运到寄存器中供数据传输。借此,总结一下相关知识。
时钟配置
时钟配置是单片机运行的基本,当然如果你只是简单的点灯,不需要严格的时钟配置。但这种情况几乎不会存在,所以,熟悉时钟配置很有必要。
STM32CUBEMX—HAL库
利用STM32官方系列的可视化时钟配置,似乎让时钟配置十分简单和快捷,只需要动几下鼠标便可实现时钟树配置。
STM标准库
使用标准的库函数进行时钟配置可能需要麻烦一点,只要思路清晰,也一样很顺利的进行配置。
以正点原子的时钟配置为例
选择使用外部晶振还是内部晶振 这里选择外部晶振
根据选择的晶振修修改Stm32f10x.h中HSE宏定义 应该修改第二个
1
2
3
4
5
定义system_stm32f10x.c中系统时钟宏定义
1
2
3
4
5
6
7
8
9
10
11
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz 24000000 */
/* #define SYSCLK_FREQ_36MHz 36000000 */
/* #define SYSCLK_FREQ_48MHz 48000000 */
/* #define SYSCLK_FREQ_56MHz 56000000 */ 4.修改system_stm32f10x.c中系统时钟的修改
1
2
3
4
5
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE| RCC_CFGR_PLLMULL6);//!!!一定要注意这里啊啊啊!!!!!RCC_CFGR_PLLSRC_HSE
SPI通信协议
硬件SPI
硬件spi更加稳定,但是代码如果使用HAL可能会遇到初始化的一些bug,但都还好,应该有人踩过坑啦
软件模拟SPI
软件模拟SPI是很常见的方式,不需要特定的IO接口,缺点就是容易被中断打断时序。