stm32---USART---主函数模块+库函数
来源:互联网 发布:matlab删除矩阵某一行 编辑:程序博客网 时间:2024/04/29 22:07
//core_cm3.c与core_cm3.h: 提供内核接口
//system_stm32f10x.c与system_stm32f10x.h: 提供系统时钟设置及总线时钟,包含SystemInit()函数//stm32f10x.h: (各种结构体及宏定义),提供系统寄存器的定义声明及包装内存操作
//startup_stm32f10x_hd.h: 启动文件主要是进行堆栈之类的初始化,中断向量表及中断函数定义
//stm32f10x_it.c与stm32f10x_it.h: 提供中断服务函数
//stm32f10x_conf.h 系统外设配置开关信号
//delay.h---sys.h---stm32f10x.h(包含结构体变量与寄存器相对应操作)---stm32f10x_conf.h
//system_stm32f10x.c在实现系统时钟的时候要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含了stm32f10x.h 这个头文件。
//misc.c提供外设对内核中的NVIC(中断向量控制器)的访问函数
#include <stdio.h>//包含printf调用fputc的底层实现,int fputc(int ch, FILE *f)
#include "stm32f10x.h"
void usart_init(void);
void delay_init(void);
void delay_ms(u16 nms);
void delay_us(u32 nus);
static u8 fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数
int main(void)
{
u8 flg=0;
u16 times=0;
delay_init();
usart_init();
while(1)
{
if(times%200==0)
{
switch(flg)
{
case 0 :
{printf("\r\n牛振兴,很好,你呢?!\r\n");break; }
case 1 :
{printf("\r\n收到请回答,fine and you ?!\r\n");break; }
default: { break; }
}
flg=!flg;
}
times++;
delay_ms(10);
}
}
void usart_init(void)
{
//定义串口Usart,GPIO初始化结构体
GPIO_InitTypeDef GPIO_Init_Struct;
USART_InitTypeDef USART_Init_Struct;
//打开串口及GPIO复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
//串口复位》》》》》》》》》》》》》》》》》》》》》串口复位在初始化之前?之后
USART_DeInit(USART1);
//GPIO及串口初始化结构体参数配置
GPIO_Init_Struct.GPIO_Pin=GPIO_Pin_9;
GPIO_Init_Struct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init_Struct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Init_Struct);
GPIO_Init_Struct.GPIO_Pin=GPIO_Pin_10;
GPIO_Init_Struct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init_Struct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Init_Struct);
USART_Init_Struct.USART_BaudRate = 9600;//一般设置为9600;
USART_Init_Struct.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_Init_Struct.USART_StopBits = USART_StopBits_1;//一个停止位
USART_Init_Struct.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_Init_Struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
USART_Init_Struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式
//初始化串口
USART_Init(USART1,&USART_Init_Struct);
//使能串口
USART_Cmd(USART1,ENABLE);
//定义串口中断初始化结构体
//初始化中断NVIC
//开启中断
//编写中断服务函数
}
//初始化延迟函数
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择外部时钟 HCLK/8
fac_us=SystemCoreClock/8000000;//为系统时钟的1/8
fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数
}
//延时nus
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
//延时nms
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
/*使用microLib的方法,重定义fputc函数 */
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}
return ch;
}
int GetKey (void) {
while (!(USART1->SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
//重定义fputc函数
//int fputc(int ch, FILE *f)
//{
// while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
// USART1->DR = (u8) ch;
// return ch;
//}
0 0
- stm32---USART---主函数模块+库函数
- STM32-USART库函数
- STM32 USART库函数介绍2
- stm32 USART 串口通信[操作寄存器+库函数]
- stm32 USART 串口通信[操作寄存器+库函数]
- stm32 USART 串口通信[操作寄存器+库函数]
- USART库函数
- STM32 学习八 USART通信3 库函数方式编程
- STM32 USART 输入输出C库函数重定向理解
- STM32库函数实现USART发送数据(刘凯)
- STM32有关USART的配置函数
- STM32中USART常用的发送函数
- STM32 USART
- STM32 USART
- STM32-USART
- STM32的USART重定向实现printf函数
- STM32的USART重定向实现printf函数
- STM32 -USART中断方式
- Coding 在线添加和删除文件教程
- unity之自动寻径
- Coding,做一个有情怀的产品
- 一致性Hash
- cookie清除
- stm32---USART---主函数模块+库函数
- 结合dom4j和反射机制解析xml并实例化对象
- curl 和 wget 配置 host 跳过 cdn 直接访问真实服务器
- block 简单使用
- d3 tree 项目实例一
- crawljax之ExitNotifier类
- 大数据与机器学习博文链接
- Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
- Differences between OpenCV JavaCV and OpenCV4Android