你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】+STM32学习笔记(兵戈)

[复制链接]
wzccvv777 提问时间:2014-4-21 12:09 /
 STM32学习笔记
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他们的头文件
 
 
已成功!
收藏 1 评论2 发布时间:2014-4-21 12:09

举报

2个回答
独行小侠 回答时间:2014-7-22 10:47:30

RE:【MCU实战经验】+STM32学习笔记(兵戈)

楼主棒哒哒
lihaofeng 回答时间:2016-9-14 15:54:26
群主厉害的啊
,不错啊

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版