i)
//改动占空比
TIM_SetCompare4(TIM3,
j)
管脚的IO输出形式是依据运用来定,比方假如用PWM输出驱动LED则应该将相应管脚设为AF_PP,不然单片机没有输出。
注:下面是一些常用的代码,网上许多可是大多注释不全。高手看没问题,关于咱们这些新手就费力了……所以我把这些代码会集,进行了逐句注释,期望对新手们有价值。
flash:
我的了解——对芯片内部flash进行操作的函数,包含读取,状况,擦除,写入等等,能够答应程序去操作flash上的数据。
根底运用1,FLASH时序推迟几个周期,等候总线同步操作。引荐依照单片机体系运转频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。一切程序中有必要的
用法:FLASH_SetLatency(FLASH_Latency_2);
方位:RCC初始化子函数里边,时钟起振之后。
根底运用2,敞开FLASH预读缓冲功用,加快FLASH的读取。一切程序中有必要的
用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
方位:RCC初始化子函数里边,时钟起振之后。
3、
我的了解——不了解,也不需求了解。只需知道一切外设在调试的时分,EWRAM需求从这个函数里边取得调试所需信息的地址或许指针之类的信息。
根底运用1,只要一个函数debug。一切程序中有必要的。
用法:
#endif
4、
我的了解——办理体系内部的中止,担任翻开和封闭中止。
根底运用1,中止的初始化函数,包含设置中止向量表方位,和敞开所需的中止两部分。一切程序中有必要的。
用法:
{
NVIC_InitTypeDef
#ifdef
NVIC_SetVectorTable(NVIC_VectTab_RAM,
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,
#endif
//以下为中止的敞开进程,不是一切程序有必要的。
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//设置NVIC优先级分组,办法。
//注:总共16个优先级,分为抢占式和呼应式。两种优先级所占的数量由此代码确认,NVIC_PriorityGroup_x能够是0、1、2、3、4,别离代表抢占优先级有1、2、4、8、16个和呼应优先级有16、8、4、2、1个。规则两种优先级的数量后,一切的中止等级有必要在其间挑选,抢占等级高的会打断其他中止优先履行,而呼应等级高的会在其他中止履行完优先履行。
//NVIC_InitStructure.NVIC_IRQChannel
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPrio
//NVIC_InitStructure.NVIC_IRQChannelSubPriority
//NVIC_InitStructure.NVIC_IRQChannelCmd
//NVIC_Init(&NVIC_InitStructure);
}
5、
我的了解——办理外部、内部和外设的时钟,设置、翻开和封闭这些时钟。
根底运用1:时钟的初始化函数进程——
用法:void
{
if
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//flash读取缓冲,加快
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_PCLK1Config(RCC_HCLK_Div2);
//注:AHB首要担任外部存储器时钟。PB2担任AD,I/O,高档TIM,串口1。APB1担任DA,USB,SPI,I2C,CAN,串口2345,一般TIM。
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,
RCC_PLLCmd(ENABLE);
while
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while
//RCC_AHBPeriphClockCmd(ABP2设备1
//RCC_APB2PeriphClockCmd(ABP2设备1
}
6、
我的了解——外部设备经过引脚给出的硬件中止,也能够发生软件中止,19个上升、下降或都触发。EXTI0~EXTI15连接到管脚,EXTI线16连接到PVD(VDD监督),EXTI线17连接到RTC(闹钟),EXTI线18连接到USB(唤醒)。
根底运用1,设定外部中止初始化函数。按需求,不是有必要代码。
用法:
{
EXTI_InitTypeDef
EXTI_InitStructure.EXTI_Line
EXTI_InitStructure.EXTI_Mode
EXTI_InitStructure.EXTI_Trigger
EXTI_InitStructure.EXTI_LineCmd
EXTI_Init(&EXTI_InitStructure);
}
7、
我的了解——经过DMA运用能够加快单片机外设、存储器之间的数据传输,并在传输期间不影响CPU进行其他工作。这关于入门开发根本功用来说没有太大必要,这个内容先行越过。
8、
我的了解——能够输出和运用体系时钟的计数、状况。
根底运用1,准确计时的延时子函数。引荐运用的代码。
用法:
static
void
{
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_ITConfig(DISABLE);
SysTick_SetReload(9000);
SysTick_ITConfig(ENABLE);
}
void
{
SysTick_CounterCmd(SysTick_Counter_Enable);
while(TimingDelay
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_CounterCmd(SysTick_Counter_Clear);
}
void
{
if
{
}
}
注:主张娴熟后运用,所触及常识和设备太多,新手犯错的可能性比较大。新手可用简化的延时函数替代:
void
{
}
当延时较长,又不需求准确计时的时分能够运用嵌套循环:
void
{int
{for
}
9、
我的了解——一切输入输出管脚形式设置,能够是上下拉、浮空、开漏、模仿、推挽形式,频率特性为2M,10M,50M。也能够向该管脚直接写入数据和读取数据。
根底运用1,gpio初始化函数。一切程序有必要。
用法:void
{
GPIO_InitTypeDef
GPIO_InitStructure.GPIO_Pin
GPIO_InitStructure.GPIO_Speed
GPIO_InitStructure.GPIO_Mode
GPIO_Init(GPIOC,
//注:以上四行代码为一组,每组GPIO特点有必要相同,默许的GPIO参数为:ALL,2MHz,FLATING。假如其间恣意一行与前一组相应设置相同,那么那一行能够省掉,由此推论假如前面现已将此行参数设定为默许参数(包含运用GPIO_InitTypeDef
……
}
根底运用2,向管脚写入0或1
用法:GPIO_WriteBit(GPIOB,
根底运用3,从管脚读入0或1
用法:GPIO_ReadInputDataBit(GPIOA,
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feiniao_lql/archive/2010/06/13/5668585.aspx
0、
a)
b)
1、
a)
b)
c)
d)
void
void
void
void
e)
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
f)
归于Lib的Debug函数的调用,应该放在main函数最开端,不要改动其方位。
g)
Flash优化处理能够不做,可是两句也不难也不必改参数……
依据需求敞开设备时钟能够节约电能
时钟频率需求依据实际情况设置参数
h)
留意了解占先优先级和呼应优先级的分组的概念
i)
留意今后的进程中搜集不同管脚运用对应的频率和形式的设置。
作为凹凸电平的I/O,所需设置:RCC初始化里边翻开RCC_APB2
PeriphClockCmd(RCC_APB2Periph_GPIOA);GPIO里边管脚设定:IO输出(50MHz,Out_PP);IO输入(50MHz,IPU);
j)
GPIO_WriteBit(GPIOB,
GPIO_WriteBit(GPIOB,
GPIO_WriteBit(GPIOB,
GPIO_ReadInputDataBit(GPIOA,
k)
void
{for(;
试验过程:
RCC初始化函数里增加:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1
不必其他中止,NVIC初始化函数不必改
GPIO初始化代码:
//IO输入,GPIOB的2、10、11脚输出
简略的推迟函数:
void
{
完结之后再在main.c的while里边写一段:
GPIO_WriteBit(GPIOB,
Delay(0xffff);
GPIO_WriteBit(GPIOB,
Delay(0xffff);
就能够看到连接在PB2脚上的LED闪耀了,单片机就跑起来了。
STM32笔记之八:来跟PC打个招呼,根本串口通讯
a)
b)
void
c)
void
初始化代码:
void
{
//串口参数初始化
//初始化参数设置
USART_InitStructure.USART_WordLength
USART_Init(USART1,
}
RCC中翻开相应串口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1
GPIO里边设定相应串口管脚形式
//串口1的管脚初始化
GPIO_InitStructure.GPIO_Mode
GPIO_InitStructure.GPIO_Pin
GPIO_InitStructure.GPIO_Mode