找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1832|回复: 0
收起左侧

STM32学习笔记

[复制链接]
ID:127084 发表于 2016-6-17 12:19 | 显示全部楼层 |阅读模式
0.  注意:新建STM32工程时,添加STM32F10X_HD宏和设置头文件路径十分重要,弄不好久编译不了。有时头文件前需要打两点,有时一次设置路径不会成功,需多次设置。我就被这个困扰了好久。
1.       USART1通用同步异步收发器:
编程:
.初始化串口,因为串口也要用IO口进行收发数据,所以初始化串口时要申明两个结构化类型参数( GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;)分别对IO口和串口外设进行初始化。给两个结构化类型参数赋初值用来设置两个外设。IOTXPA09RXPA10调用IO口初始化外设函数GPIO_Init完成。USART1:调用串口初始化外设函数USART_Init完成。
.开启时钟。同上也要开启两个时钟源(RCC_APB2Periph_GPIOARCC_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),使能ADC1DMA1的时钟,初始化串口IOPC.01。调用RCC_AHBPeriphClockCmd使能DMA1时钟,
3.调用RCC_APB2PeriphClockCmd使能ADC1时钟。设置PC.01为模拟输入模式不设置速率。配置ADC1的工作模式为DMA模式,设置DMA1外设的一系列参数配置,使能DMA1外设模块。
4.设置ADC1采样模式,配置一系列ADC1的参数。配置ADC1时钟,使能ADCDMA外设使能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.hascii.h
  2.在工程中添加四个文件(可直接复制到USER中再添加进工程)分别是lcd.clcd_botton.csystick.cTouch.c、和相应的头文件lcd.hlcd_botton.hsystick.hTouch.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里面的文件除OPTION00README外全部复制到USER中,并将CC936.c也复制到USER中,增加头文件搜索路径。在工程面板上的USER项中添加ff9中的C文件并在主函数中INCLUDE他们的头文件


已成功!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表