历史上的今天
今天是:2024年08月26日(星期一)
2018年08月26日 | STM32 USART寄存器方式编程
2018-08-26 来源:eefocus
#include "stm32f10x.h"
#define GPIOA_ODR_A GPIOA_BASE+0X0C
#define GPIOA_IDR_A GPIOA_BASE+0X08
#define GPIOB_ODR_A GPIOB_BASE+0X0C
#define GPIOB_IDR_A GPIOB_BASE+0X08
#define GPIOC_ODR_A GPIOC_BASE+0X0C
#define GPIOC_IDR_A GPIOC_BASE+0X08
#define GPIOD_ODR_A GPIOD_BASE+0X0C
#define GPIOD_IDR_A GPIOD_BASE+0X08
#define GPIOE_ODR_A GPIOE_BASE+0X0C
#define GPIOE_IDR_A GPIOE_BASE+0X08
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr &0xf0000000)+ 0X2000000 + ((Addr&0Xfffff)<<5)+(BitNum<<2)))
// AliasAddr = 0x2200 0000 + ((A-0X2000 0000)*8+n)*4 (n= 0~7)
// = 0x2200 0000+ (A-0X2000 0000)*32+n*4 4个字节,32个位;
#define PAout(n) BitBand(GPIOA_ODR_A,n) //PAout输出表达式;
#define PAin(n) BitBand(GPIOA_IDR_A,n) //PAin输出表达式;
#define PBout(n) BitBand(GPIOB_ODR_A,n)
#define PBin(n) BitBand(GPIOB_IDR_A , n)
#define PCout(n) BitBand(GPIOC_ODR_A , n)
#define PCin(n) BitBand(GPIOC_IDR_A , n)
#define PDout(n) BitBand(GPIOD_ODR_A , n)
#define PDin(n) BitBand(GPIOD_IDR_A , n)
#define PEout(n) BitBand(GPIOE_ODR_A , n)
#define PEin(n) BitBand(GPIOE_IDR_A , n)
void RCC_Configuration(void);//首先设置系统时钟为8MHZ
void GPIO_Configuration(void);
void delay1ms(u16 t){
u16 i,j;
for(i=0;i for(j=1000;j>0;j++); } int main(void) { float DIV; u16 M,F,BRR; u32 Bound; u8 data='A'; RCC_Configuration(); GPIO_Configuration(); //USART1模块的设置; //1. USART_CR1置位UE使能、 2. USART_CR1的M位定义字长、 3. USART_CR2中STOP停止位的位数、 //4. USART_CR1中的TE位、 5. USART_BRR寄存器选择波特率、 6. 把要发送的数据写入USART_DR寄存器中 USART1->CR1|=(1<<13); USART1->CR1&=~(1<<12);//M=0; 一个起始位,8个数据位,n个停止位。 USART1->CR2|=~(3<<12);//1个停止位 USART1->CR1 |=(1<<3);//TE位使能; //; Bound=9600;//设定波特率值是9600 DIV=(float)(72*1000*1000/(Bound*16));//USARTDIV整数 M=DIV;//USARTDIV整数 F=(DIV-M)*16;//USARTDIV小数位 BRR=(M<<4)| F;//把波特率计算值给BRR寄存器 USART1->BRR=BRR;//把波特率计算值给BRR寄存器 //发送一个字符'A'到USART1的TXD ,把要发送的数据写入USART_DR寄存器中 for(F=0;F<20;F++){ USART1->DR=data; data++; while((USART1->SR&1<<6)==0);//USART_SR的TC置一,表示发送数据完成;否则没有完成; } return 0; } void RCC_Configuration(void)//系统时钟设置,应用库函数编程过程 { //----------使用外部RC晶振----------- RCC_DeInit(); //初始化为缺省值 RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪 //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer //FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ,系统给外设的时钟fpclkx RCC_PLLCmd(ENABLE); //Enable PLLCLK while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source //---------打开相应外设时钟-------------------- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外设的GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能APB2外设的GPIOC的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); } void GPIO_Configuration(void)//复用引脚设置 { GPIO_InitTypeDef GPIO_InitStructure; /* Configure USARTx_Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//复用上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USARTx_Rx as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); }
上一篇:STM32的GPIO寄存器概述
史海拾趣
|
坚冰的融化往往意味着春天的到来。然而,冰冻时间长达十年之久的北京移动资费的下调,又将意味着什么呢? “此次运营商资费下调的真实目的是在为3G做准备。”计世资讯资深分析师郭海涛表示。 易观国际的邱林也认为,此次以套餐形式出现 ...… 查看全部问答> |
|
为什么我原理图中的BUS总线显示连接上了,ERC检查也没错,导入到PCB中就没有连上呢,部分原理图如下,谢谢高手指导! [ 本帖最后由 zhouyueping1986 于 2008-6-16 16:03 编辑 ]… 查看全部问答> |
|
兼职PROE、Mentor要求: 1、熟练使用PROE、Mentor软件; 2、1年以上PROE、Mentor二次开发的经验;? 3、熟悉使用关系型数据库(SQL)基本功能; 4、有相关成果或演示产品。 5、业余时间丰富。 联系人:北京神舟软件有限公司 胡炎平 1 ...… 查看全部问答> |
|
这是设计师专门为意大利米兰一家公司员工设计的办公专用头罩,它的作用就是在一些开放式办公环境里,戴上它,员工们可以把自己的注意力集中在一点,从而盼望能进步大家的办公效率。 头罩设计了15款,比较好笑的是,有些头罩戴着让人感到样子象一个 ...… 查看全部问答> |
|
本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata 大家上午好,请问有谁用过AVR的单片机写过18B20的驱动啊 … 查看全部问答> |
|
中心简介: 广东省嵌入式软件公共技术中心(简称GEC)是广东美的集团嵌入式产品研发中心,原是广东省政府公开向社会竞标的项目,由广东美的集团中标承建。中心建设资金总投入3000万元,其中省政府资助资金900万元、地方政府配套450万元、美的 ...… 查看全部问答> |
|
紧急求助:USB设备移除后再插上,无法激活! 2、我插上设备,在弹出的提示框中输入驱动程序名称后,能正确安装、调用USBDeviceAttach函数初始化设备了,我在应用程序中用CreateFil e和DeviceIOControl函数可以访问了,但是当我拔出设备第二次插进 ...… 查看全部问答> |
|
我的SOPC FILE菜单中怎么没有 New Board Discription选项,用来创建一个新的班机描述呢?我的软件版本太低吗?用的QUARTUS5。0… 查看全部问答> |




