姓名: 王晨晨 日期: 7.26
今日学习任务
通过查询固件库编程点亮一个LED灯,并使其定时1秒,亮灭一次。
今日任务完成情况
已完成
今日开发中出现的问题汇总
无
今日未解决问题
无
今日开发收获
SysTick:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器。
函数SysTick_Config()是属于CMSIS里面的一个函数,实现配置如下
- 函数的参数是重载寄存器reload要赋予的初值
- 配置嘀嗒定时器的优先级是最低优先级15
- 配置HCLK作为系统的时钟源
- 使能嘀嗒定时器中断
- 启动嘀嗒定时器计数
可以在调用函数SysTick_Config()后通过函数 SysTick_CLKSourceConfig()更改嘀嗒定时器的时钟源为HCLK/8。
可以在调用函数SysTick_Config()后通过函数 NVIC_SetPriority()修改优先级。
NVIC_IROChannel:用来设置中断源。
GPIO_SetBits(GPIOx,GPIO_Pin_x)就可以实现对GPIO
x的pinx位为高电平
自我评价
自己在固件库中找有点难。
其它
代码:
main.c
#include "stm32f4xx.h"
#include "bsp_led.h"
#include "bsp_systick.h"
#include "bsp_usart.h"
void delay(uint32_t t)
{
for(;t!=0;t--)
;
}
int main(void)
{
GPIO_LED_Config();
SysTick_Init();
USART_Config();
while(1)
{
printf("\r\n 苏嵌欢迎您 \r\n");
delay(0xfffffff);
}
}
bsp_usart.c
#include "bsp_usart.h"
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_AHB1PeriphClockCmd(USART_GPIO_CLK, ENABLE);
RCC_APB2PeriphClockCmd(USART_CLK,ENABLE);
GPIO_PinAFConfig(USART_GPIO_PORT,USART_TX_PIN,USART_AF);
GPIO_PinAFConfig(USART_GPIO_PORT,USART_RX_PIN,USART_AF);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(USART_GPIO_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(USART_GPIO_PORT, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = USART_BAUDRATE;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART,&USART_InitStructure);
//NVIC_Configuration();
USART_Cmd(USART,ENABLE);
}
int fputc(int ch, FILE *f)
{
USART_SendData(USART, (uint8_t)ch);
while(USART_GetFlagStatus(USART, USART_FLAG_TXE)==RESET);
return ch;
}
bsp_usart.h
#ifndef _BSP_USART_H
#define _BSP_USART_H
#include "stm32f4xx.h"
#include <stdio.h>
#define USART_GPIO_CLK RCC_AHB1Periph_GPIOA
#define USART_CLK RCC_APB2Periph_USART1
#define USART_GPIO_PORT GPIOA
#define USART_TX_PIN GPIO_PinSource9
#define USART_RX_PIN GPIO_PinSource10
#define USART_AF GPIO_AF_USART1
#define USART_BAUDRATE 115200
#define USART_IRQ USART1_IRQn
#define USART_IRQHandler USART1_IRQHandler //USART1_IRQHandler
#define USART USART1
void USART_Config(void);
#endif