STM32学习第四天---开启固件库函数编程之旅

来源:互联网 发布:python 打包发布 编辑:程序博客网 时间:2024/05/22 12:12

发现现代化骗人手法也更加人性化了,qq聊天真人操作,盗取我同学的qq号,然后只要银行卡,然后让我还给他个验证码,我连续给了他好几张卡都说不行。突然群里传来消息同学的好友有的已经被骗了好多钱了,我就心想啊,多亏我是个穷B啊,卡倒是很多,但是没有一张卡有钱。


今天的学习内容还是很不错的了,主要是开启了固件库编程,而且重要的是把昨天晚上遗留的一个发送26个大写字母的USART1波特率设置不好的问题解决了。

开启了固件库主要先对这些基本用的上东西浏览一番:


最后还搞定一个把printf 输出重定向函数,把输出数据定向到了USART1中,如此的一番操作,那未来的编码之路,我就不会害怕bug了。我就会不停的de de de debug

比寄存器操作代码更板正更有可读性:

#include "stm32f10x.h"#include <stdio.h>/**************************************************Function Name : fputc*Description   : 重定向这个c库 (stdio) printf 函数  文件流 -> 串口USART1 *Input   : ch, *f*Return    : int***************************************************/int fputc(int ch, FILE *f){/ch 送给 USART1 USART_SendData(USART1, ch);//等待发送完毕while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) ;return ch;}void Delay_MS(u16 dly){u16 i, j;for (i = 0; i < dly; i++)for (j = 1000; j > 0; j--);}void GPIO_Configuration(void);void RCC_Configuration(void);void USART_Configuration(u32 BaudRate);int main(void){u8 i, data;USART_Configuration(9600);RCC_Configuration();GPIO_Configuration();USART_Cmd(USART1, ENABLE);data = 'A';for (i = 0; i < 26; i++){USART_SendData(USART1, data);data++;while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);}printf("\nFlaergwe Fighting !!!\n");}void GPIO_Configuration(){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);}void RCC_Configuration(){//---------使用外部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 stateRCC_HCLKConfig(RCC_SYSCLK_Div1);//HCLK = SYSCLKRCC_PCLK2Config(RCC_HCLK_Div1);//PCLK2 = HCLKRCC_PCLK1Config(RCC_HCLK_Div2);//PCLK1 = HCLK/2RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//PLLCLK = 8MHZ * 9 = 72MHZRCC_PLLCmd(ENABLE);//Enable PLLCLKwhile (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//Wait till PLLCLK is readyRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//Select PLL as system clockwhile(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);//..............AFIO.......RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//..............USART1.....//GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE)}void USART_Configuration(u32 BauRate){USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate = BauRate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode= USART_Mode_Tx | USART_Mode_Rx;USART_Init(USART1, &USART_InitStructure);}


0 0
原创粉丝点击