标题:
STM32学习笔记
[打印本页]
作者:
51hei大小
时间:
2016-6-17 12:19
标题:
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
他们的头文件
已成功!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1