STM32学习笔记 0. 注意:新建STM32工程时,添加STM32F10X_HD宏和设置头文件路径十分重要,弄不好久编译不了。有时头文件前需要打两点,有时一次设置路径不会成功,需多次设置。我就被这个困扰了好久。 1. USART1通用同步异步收发器: 编程: 1.初始化串口,因为串口也要用IO口进行收发数据,所以初始化串口时要申明两个结构化类型参数( GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;)分别对IO口和串口外设进行初始化。给两个结构化类型参数赋初值用来设置两个外设。IO:TX:PA09,RX:PA10调用IO口初始化外设函数GPIO_Init完成。USART1:调用串口初始化外设函数USART_Init完成。 2.开启时钟。同上也要开启两个时钟源(RCC_APB2Periph_GPIOA,RCC_APB2Periph_USART1)。调用APB2时钟源开启函数RCC_APB2PeriphClockCmd完成。 3 .使能USART1外设,USART不同于IO口外设它要使能,调用使能USART外设函数USART_Cmd完成。 4 .编写输出打印函数,重定向Printf函数或自定义USART1_printf函数。 5 .在Main.c中调用Printf函数或自定义USART1_printf函数在串口助手上显示要输出的信息。 6 .若有接收从上位机发来的信息时,要用到接收中断,在stm32f10x_it.c中编写中断服务函数。当然用到中断时要配置嵌套向量中断控制器NVIC。调用NVIC_Init函数完成,也要申明中断控制器结构体类型参数 NVIC_InitTypeDef NVIC_InitStructure; 注意: 1. 用的电源不稳定时,会造成串口接收的数据乱码。 2. 摸/数转换器(ADC): 编程:AD采集通过串口显示电压,串口编程部分跳过 1.初始化串口。 2.初始化AD,写AD转换地址#define ADC1_DR_Address ((u32)0x40012400+0x4c),使能ADC1和DMA1的时钟,初始化串口IO口PC.01。调用RCC_AHBPeriphClockCmd使能DMA1时钟, 3.调用RCC_APB2PeriphClockCmd使能ADC1时钟。设置PC.01为模拟输入模式不设置速率。配置ADC1的工作模式为DMA模式,设置DMA1外设的一系列参数配置,使能DMA1外设模块。 4.设置ADC1采样模式,配置一系列ADC1的参数。配置ADC1时钟,使能ADC的DMA外设使能ADC外设模块。开启校准器,软件触发ADC转换。 5.在主函数中计算转换AD的值。用串口显示出来。 3. RTC实时时钟 /*要想改变设置初值,就将下面if判断去掉直接上电就执行if后面的语句 (当然也要将后面的else去掉,否则会编译不过去)。做完上面的活编译 下载,在串口中设置时间初值(通过串口发送字符型数据)。不断电不复 位,再将if判断补上,时间初值就设定好了,下次打开无需在设置。*/ 4. 野火液晶屏上的LCD.C中的void LCD_Str_ENCH_O_P(u16 x,u16 y,const u8 *str,u16 Color)中第1096行的有一个错误: Tmp_y += 8 ;错写成了 Tmp_x += 8 ;导致液晶显示的时候遇到逗号就错位全文看不清。根据我的创作经验,可以将中文标点符号换成英文标点符号输出,而不是像野火那样仅仅将中文逗号换成空格,本人认为可以找出全部的中文标点符号的码值,再在调用字库前判断码值,如果是中文则换为英文符(因为一般汉字字库中没有标点符号的。如野火的这种。而英文字符库中标点都有,在液晶上显示时,中英文符号区别不大)。 关于找码值:在文件中一个中文汉字的码值共16位。分为高低各八位,高八位为行,低八位为列。但这16位行列数据在文件中是分开存储的。要找到一个汉字或符号,必须先判断高八位(行数据)再判断低八位(列数据)低八位在高八位后一字节,如*str,*(str+1)。例如:野火的液晶程序中没有中文标点符号。我修改后的程序中找中文符号码值就是用的这种方法。 5.移植彩屏触摸函数到别的工程中,不用再去编写彩屏驱动和LCD应用函数(如画圆,写字等) 1.在工程USER中加入两个头文件asc_font.h和ascii.h。 2.在工程中添加四个文件(可直接复制到USER中再添加进工程)分别是lcd.c、lcd_botton.c、systick.c、Touch.c、和相应的头文件lcd.h、lcd_botton.h、systick.h、Touch.h、。 3.修改stm32f10x_conf.h文件中包含的头文件,将彩屏需要的外设头文件的注释去掉。分别是: #include "stm32f10x_exti.h" #include "stm32f10x_fsmc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" #include "misc.h" 4.在工程界面的FWlib栏中添加misc.c stm32f10x_exti.c stm32f10x_fsmc.cstm32f10x_spi.c 四个函数。 5.编写中断函数,在stm32f10x_it.c中编写void EXTI9_5_IRQHandler(void)中断服务函数,并加入头文件#include "stm32f10x_exti.h" #include "stm32f10x_tim.h"。触摸中断。 在中断函数中加入 volatile unsigned char touch_flag=0; extern void TimingDelay_Decrement(void); extern void Delay_us(__IO u32 nTime); 6.至此就可在工程中调用函数对彩屏进行操作。 6 文件系统移植: 将ff9里面的文件除OPTION和00README外全部复制到USER中,并将CC936.c也复制到USER中,增加头文件搜索路径。在工程面板上的USER项中添加ff9中的C文件并在主函数中INCLUDE他们的头文件 已成功! |
RE:【MCU实战经验】+STM32学习笔记(兵戈)
,不错啊