運(yùn)動(dòng)網(wǎng)頁設(shè)計(jì)哪里有seo排名優(yōu)化
可以添加上拉電阻,但會(huì)增加功耗,傳輸距離變長
? 要添加庫函數(shù)USART
?官方參考文檔說明書位置
?ALT+左鍵可實(shí)現(xiàn)整體刪除(如下圖)
?輸出模式第三種模式AF
----------------------
源碼?
?遠(yuǎn)程控制pc端
#include <stm32f4xx.h>
#include "led.h"
#include "key.h"
#include "stdio.h"
?? ?
//#define BIT_BAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define PFout(n) (*(volatile uint32_t *)(0x42000000+(GPIOF_BASE+0x14-0x40000000)*32+(n)*4))
#define PAin(n) (*(volatile uint32_t *)(0x42000000+(GPIOA_BASE+0x10-0x40000000)*32+(n)*4))
#define PEout(n) (*(volatile uint32_t *)(0x42000000+(GPIOE_BASE+0x14-0x40000000)*32+(n)*4))
#define PEin(n) (*(volatile uint32_t *)(0x42000000+(GPIOE_BASE+0x10-0x40000000)*32+(n)*4))
?? ?
static?? ? GPIO_InitTypeDef GPIO_InitStructure;
static?? ? USART_InitTypeDef USART_InitStructure;
static?? ? NVIC_InitTypeDef NVIC_InitStructure;
void usart1_init(uint32_t baud)
{
?? ?//端口A硬件時(shí)鐘打開
?? ?RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
?? ?
?? ?//串口1硬件時(shí)鐘打開
?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
?? ?
?? ?//配置PA9 PA10為AF模式(復(fù)用功能)
?? ?GPIO_InitStructure.GPIO_Pin ? = GPIO_Pin_9 | GPIO_Pin_10 ; ?? ?//9 10號(hào)引腳
?? ?GPIO_InitStructure.GPIO_Mode ?= GPIO_Mode_AF;//輸出模式第三種模式AF模式
?? ?GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出
?? ?GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,響應(yīng)越快,但是功耗會(huì)更高
?? ?GPIO_InitStructure.GPIO_PuPd ?= GPIO_PuPd_NOPULL;//不使能上下拉電阻
?? ?GPIO_Init(GPIOA,&GPIO_InitStructure);
?? ?
?? ?//由于引腳支持很多功能,需要指定該引腳的功能,當(dāng)前要制定支持USART1
?? ?
?? ?GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
?? ?GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
?? ?
?? ?//配置USART1相關(guān)參數(shù):波特率,數(shù)據(jù)位,停止位,校驗(yàn)位
?? ?
?? ?USART_InitStructure.USART_BaudRate = baud; ? //波特率,就是通信的速度
?? ?USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位數(shù)據(jù)位
?? ?USART_InitStructure.USART_StopBits = USART_StopBits_1; ?//1個(gè)停止位
?? ?USART_InitStructure.USART_Parity = USART_Parity_No; ? ?//不需要校驗(yàn)位
?? ?USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制功能不需要
?? ?USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; ? //串口允許發(fā)送和接收數(shù)據(jù)
?? ?USART_Init(USART1, &USART_InitStructure);
?? ?
?? ?//配置中斷觸發(fā)方式,接收到一個(gè)字節(jié),就通知CPU處理
?? ?USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
?? ?
?? ?//NVIC配置其優(yōu)先級(jí)
?? ?NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; ?//中斷號(hào)
?? ?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; ? //搶占優(yōu)先級(jí)
?? ?NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; ? ? ?//響應(yīng)優(yōu)先級(jí)
?? ?NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; ? ?//打開通道給NVIC管理
?? ?NVIC_Init(&NVIC_InitStructure);
?? ?
?? ?//使能USART1工作
?? ?USART_Cmd(USART1, ENABLE);
?? ?
?? ?
?? ?
}
//發(fā)送數(shù)據(jù)
void usart1_send_str(const char *str)
{
?? ? const char * p = str;
?? ?while(*p!='\0')
?? ?{
?? ??? ?//發(fā)送一個(gè)字節(jié)
?? ??? ?USART_SendData(USART1,*p);
?? ??? ?p++;
?? ??? ?//等待發(fā)送完畢
?? ??? ?while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
?? ?}
}
int main(void)
{
?? ?NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
?? ??? ?//搶占優(yōu)先級(jí)0~3,支持4級(jí)!
?? ?//響應(yīng)優(yōu)先級(jí)0~3,支持4級(jí)!
?? ?key_init();
?? ?Led_init();
?? ?//初始化串口1波特率位115200bps,若發(fā)送/接收數(shù)據(jù)有亂碼,請(qǐng)檢查PLL
?? ?
?? ?usart1_init(115200);
?? ?usart1_send_str("hello5555\r\n");
?? ?while(1){
?? ?
?? ??? ?}
?? ?
}
void USART1_IRQHandler(void)
{
?? ?static uint8_t d;
?? ?if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)
?? ?{
?? ??? ?d=USART_ReceiveData(USART1);
?? ??? ?
?? ??? ?
?? ??? ?if(d == 'A')PFout(9)=0;
?? ??? ?if(d == 'a')PFout(9)=1;?? ?
?? ??? ?
?? ??? ?//告訴CPU,已經(jīng)完成接收中斷請(qǐng)求,可以響應(yīng)新的接收中斷請(qǐng)求
?? ??? ?USART_ClearITPendingBit(USART1,USART_IT_RXNE);
?? ?
?? ?}
}