STM32(嵌入式蓝桥杯)学习笔记

库函数开发

软件bug:1.结构体定义必须在前边不然会报错
2.每个.c和.h文件最后必要要有空行
3.项目编写完之后必须先关闭再打开才能烧录进去
4.声明函数如果没有形参要写void不然会出警告

学习资料下载:学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》。ST官方的所有中英文文档,在ST的中国大陆区网站可以下载到:
http://www.stmicroelectronics.com.cn/stonline/mcu/MCU_Pages.htm

知识点
INIT:(不但有用到的管脚一定不要忘记锁存器要一起初始化)
1.打开IO口,对IO口进行配置(初始化IO口管脚,工作模式,频率)
2.打开需要用到的时钟(A B C D排管脚)eg:每操作一个IO口之前需要对时钟进初始化
使用:
1.打开锁存器
2.打开用到的设备

外部中断:(阶级有嵌套,阶层没有嵌套)
EXTI:首先添加stm3210x_exti.c到FWLIB文件包中
NVIC:添加misc.c到FWLIB文件包中

温度模数转换:
温度计算公式:1430 - 1000*返回的的ADC值)/4.3 + 25;

历程步骤:
所有project都必须要添加gpio.c ,rcc.c
LED:(初始化led初,始化寄存器,添加stm32f10x_gpio.c stm32f10x_rcc.c)
SysTick:主函数里面编写滴答定时器函数,在中断服务函数里面完善定时器函数
LCD:添加lcd.c led.h font.h,然后去在三个write都要添加两个u16 emph = GPIOC->ODR;GPIOC->ODR = emph;

USART:(初始化配置,添加stm32f10x_usart.c)
TX:1.配置usart2 2.配置GPIO管脚2 3.编写使用函数
RX:(添加misc.c)
1.配置usart2 2.配置GPIO管脚3 3.配置中断NVIC 并且在*it.c添写中断服务程序
4.编写使用函数
遇到问题:1.RX配置 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
// USART_ITConfig(USART2, USART_IT_TXE, ENABLE);不能同时存在

KEY:(初始化A0 A8 B1 B2三个按键)
1.使用滴答定时器初始化 编写Key_Scanf()函数 编写使用函数(长短按键的是使用方法)
2.使用EXTI初始化(配置GPIO EXTI NVIC,添加exti.c和misc.c配置文件) 向中断服务函数it.c里面编写对应的函数 编写使用函数

EXTI:(外部中断/事件控制器。stm32f10x_exti.c)
EXTI0 EXTI1 EXTI2 EXTI3 EXTI4 EXTI9-5 EXTI15-10

NVIC:(Nested vectored interrupt controller。嵌套向量中断控制器 stm32f10x_misc.c)

NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  | Description

=============================================================================
NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority
| | | 4 bits for subpriority

NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority
| | | 3 bits for subpriority

NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority
| | | 2 bits for subpriority

NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority
| | | 1 bits for subpriority

NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority
| | | 0 bits for subpriority

EXTI和NVIC的区分和理解
exti是外部中断的配置,NVIC是中断优先级、开启的配置。
开启PG8的外部中断(EXTI),通过NVIC配置这个外部中断的优先级,程序中检测中断来了就点灯就行了

ADC:(初始化配置,添加stm32f10x_adc.h)
1.初始化配置ADC通道 2.编写获取函数的 3.在滴答中断服务函数里面添加标志变量 4.在主函数中使用逻辑
预分频:RCC_ADCCLKConfig(RCC_PCLK2_Div6);//对ADC进行(2.4.6.8)分频 板子最大晶振72M/6=12,ADCCLK最大是14MHz所以不能超过 14M

计算电压:ADC_GetConversionValue(ADC1)*(3.30/4095) 基准电压3.3v 12位ADC最大分辨率4096准确讲应该是4095(即2^12-1),那么ADC输出值只能在0~4096之间。把数字量转化为带单位的值时候, 就要用参考电压来计算, 得到多少伏的量, 这个容易懂了.
ADC1 ADC2 ADC3
通道0 PA0 PA0 PA0
通道1 PA1 PA1 PA1
通道2 PA2 PA0 PA2
通道3 PA3 PA3 PA3
通道4 PA4 PA4 PF6
通道5 PA5 PA5 PF7
通道6 PA6 PA6 PF8
通道7 PA7 PA7 PF9
通道8 PB0 PB0 PF10
通道9 PB1 PB1
通道10 PC0 PC0 PC0
通道11 PC1 PC1 PC1
通道12 PC2 PC2 PC2
通道13 PC3 PC3 PC3
通道14 PC4 PC4
通道15 PC5 PC5
通道16 温度传感器
通道17 内部参照电压

TIM:(可编程预分频器驱动的16位自动装载计数器,添加stm32f10x_tim.c stm32f10x_misc.c)
快速编写:6-STM32固件库代码V3.5版 TIM\TimeBase

TIM1/TIM8高级定时器 TIM2-TIM7同用定时器

TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren;
eg:500ms=((4999+1)*(7199+1))/72

4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
A.输入捕获
B.输出比较
C. PWM 生成(边缘或中间对齐模式)
D.单脉冲模式输出

● 计数器寄存器(TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动装载寄存器 (TIMx_ARR)
TIM3_CH1~TIM3_CH4 分别是接在 PA6、 PA7、 PB0 和 PB1

一 定时器:1.初始化配置打开寄存器打开中断 2.配置中断服务函数 3.编写使用函数

二PWM波:1.初始化配置选择(TIM2-TIM4)定时器的通道(ch1-ch4)进行PW波的输出,重映射

自动重装载arr 预分频psc
1.定时器时钟:TIMx_clk =72Mhz =72000000hz
2.计数器时钟:CK_cnt =72M/71(psc)+1 =1Mhz = 1us
3.定时器时间f:1*arr(1000)=1ms
频率: T=1/f=1/0.001s=1000hz=1k hz

IIC:(添加stm32f10x_i2c.c)
1.添加官网给的底层IIc.c IIc.h代码 2.看流程图(8 11)编写写入和读取函数 3.在主函数编写使用函数

RTC:(添加stm32f10x_bkp.c stm32f10x_rtc.c stm32f10x_pwr.c stm32f10x_misc.c)
1.初始化配置 2.编写中断服务函数 3.在main文件中编写分离时分秒函数并输出

BEEP:(串口PB4默认功能不是蜂鸣器需要对串口进行重映射)
1.初始化配置函数用到重映射 2.使用函数

你可能感兴趣的:(嵌入式,学习笔记,stm32,嵌入式)