STM32 学习笔记
更新时间:2023-09-26 14:31:01 阅读量: 综合文库 文档下载
- stm32推荐度:
- 相关推荐
//////////////GPIO3/////////////////// #include \
#include \#include \
int main(void) {
//1、使能时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
//定义一个IO
GPIO_InitTypeDef PORT_LED;
//设置IO引脚,模式,输出类型,速度
PORT_LED.GPIO_Pin=GPIO_Pin_4;//IO引脚,第4脚(个人的小板子PA4有连接LED) PORT_LED.GPIO_Mode=GPIO_Mode_OUT;//模式:输出
PORT_LED.GPIO_OType=GPIO_OType_PP;//输出类型,推挽输出 PORT_LED.GPIO_Speed=GPIO_Speed_10MHz;//输出速率,10MHz GPIO_Init(GPIOA,&PORT_LED);//正式初始化,PA口
GPIO_SetBits(GPIOA,GPIO_Pin_4);//输出高电平 //GPIO_ResetBits(GPIOA,GPIO_Pin_4);//输出低电平
while(1) {} }
///////////////USART//////////////////// #include \
#include \#include \#include \
int main(void) {
//1、使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//特别注意:因为串口有使用GPIO,所以对应GPIO的时钟也要使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //2、选择引脚
//TX有PA2和PA9可选,RX有PA3和PA10可选
//GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1); //GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//为什么是AF1,而不是AF0呢?见下图,数据手册才是准确的
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);
//3、引脚设置
GPIO_InitTypeDef PORT_UART1_TX;//定义TX脚,PORT_UART1_TX是自定义名称,可以任意
PORT_UART1_TX.GPIO_Pin=GPIO_Pin_9;//此参数根据上面选择的引脚来定 PORT_UART1_TX.GPIO_Speed=GPIO_Speed_10MHz; PORT_UART1_TX.GPIO_Mode=GPIO_Mode_AF; PORT_UART1_TX.GPIO_PuPd=GPIO_PuPd_NOPULL; //IO初始化
//第一个参数是系统的GPIOA、GPIOB、GPIOC等
//第二个参数是&+上面自定义的名称PORT_UART1_TX GPIO_Init(GPIOA,&PORT_UART1_TX);
GPIO_InitTypeDef PORT_UART1_RX;//定义RX脚
PORT_UART1_RX.GPIO_Pin=GPIO_Pin_10;//此参数根据上面选择的引脚来定 PORT_UART1_RX.GPIO_Speed=GPIO_Speed_10MHz; PORT_UART1_RX.GPIO_Mode=GPIO_Mode_AF; PORT_UART1_RX.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOA,&PORT_UART1_RX);
//4、串口参数配置
USART_InitTypeDef MyUsart1;//这个MyUsart1是我自定义的,可以任意定义如XYZ123 MyUsart1.USART_BaudRate=115200;//设置波特率
MyUsart1.USART_WordLength=USART_WordLength_8b;//设置数据长度 MyUsart1.USART_Parity=USART_Parity_No;//设置奇偶校验 MyUsart1.USART_StopBits=USART_StopBits_1;//设置停止位
MyUsart1.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置流控制
MyUsart1.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//设置模式 //初始化
//第一个参数是系统的USART1、USART2、USART3等 //第二个参数就是&+上面自定义的量MyUsart1 USART_Init(USART1,&MyUsart1);
//5、使能
USART_Cmd(USART1,ENABLE);
//6、接收和发送,通过查询标志位 while(1){
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=1);//等待接收 USART_ClearFlag(USART1,USART_FLAG_RXNE);//清楚接收完成标志位
USART_SendData(USART1,USART_ReceiveData(USART1));//接收什么,发送什么 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=1);//等待发送完成 USART_ClearFlag(USART1,USART_FLAG_TXE);//清楚发送完成标志位
} }
//////////////////USART之中断////////////////// #include \
#include \#include \#include \#include \
#include \
int main(void) {
//1、使能时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//2、引脚选择
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);
//3、引脚设置
GPIO_InitTypeDef PORT_UART1_TX;//定义TX脚,PORT_UART1_TX是自定义名称,可以任意
PORT_UART1_TX.GPIO_Mode=GPIO_Mode_AF;
PORT_UART1_TX.GPIO_Pin=GPIO_Pin_9;//此参数根据上面选择的引脚来定 //PORT_UART1_TX.GPIO_Speed=GPIO_Speed_10MHz; PORT_UART1_TX.GPIO_PuPd=GPIO_PuPd_UP; GPIO_Init(GPIOA,&PORT_UART1_TX);
GPIO_InitTypeDef PORT_UART1_RX;//定义RX脚 PORT_UART1_RX.GPIO_Mode=GPIO_Mode_AF;
PORT_UART1_RX.GPIO_Pin=GPIO_Pin_10;//此参数根据上面选择的引脚来定 //PORT_UART1_RX.GPIO_Speed=GPIO_Speed_10MHz; PORT_UART1_RX.GPIO_PuPd=GPIO_PuPd_UP; GPIO_Init(GPIOA,&PORT_UART1_RX);
//4、串口参数配置
USART_InitTypeDef MyUsart1;//这个MyUsart1是我自定义的,可以任意定义如XYZ123 MyUsart1.USART_BaudRate=9600;//设置波特率
MyUsart1.USART_WordLength=USART_WordLength_8b;//设置数据长度 MyUsart1.USART_Parity=USART_Parity_No;//设置奇偶校验 MyUsart1.USART_StopBits=USART_StopBits_1;//设置停止位
MyUsart1.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置流控制 MyUsart1.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//设置模式 USART_Init(USART1,&MyUsart1);
//允许接收中断RXNE和发送完成中断TC
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); USART_ITConfig(USART1,USART_IT_TC,ENABLE);
//5、使能
USART_Cmd(USART1,ENABLE);
//6、中断向量设置
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//设置中断 NVIC_InitStructure.NVIC_IRQChannelPriority=0;//设置优先级 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能 NVIC_Init(&NVIC_InitStructure);
while(1){
} }
//中断函数
void USART1_IRQHandler(void){ unsigned char temp=0; //如果是接收中断
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){
temp=USART_ReceiveData(USART1);//读完即自动清除RXNE USART_SendData(USART1,temp);
//USART_ClearFlag(USART1,USART_FLAG_RXNE); }
//如果是发送中断 else {
USART_ClearFlag(USART1,USART_FLAG_TC); //...... } }
////////////////系统定时器///////////////////// #include \#include \
int main(void){
//配置初值,系统定时器是倒数计时器,减1的
//注意:该函数的参数类型虽为uinit32_t,实际最大值为16777215,也就是2^24 SysTick_Config(SystemCoreClock/10); while(1); }
//中断函数
void SysTick_Handler(void){
//这里做你想做的事情 }
/////////////////外部中断//////////////// #include \#include \#include \#include \#include \
int main(void) {
//时钟使能
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//外部按键GPIO初始华,PA0
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);
//将EXTI0指向PA0
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0); //EXTI0中断线配置
EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure);
//EXTI0中断向量配置
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=EXTI0_1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority=0x01; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);
while(1){
} }
void EXTI0_1_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line0)!=RESET) {
//中断处理 }
//退出中断时注意清除标志位 EXTI_ClearFlag(EXTI_Line0); }
///////////ADC///////////////////
#include \#include \#include \
int main(void) {
//时钟配置
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
//ADC IO配置,此处定义PA0口为ADC端口 GPIO_InitTypeDef PORT_ADC; PORT_ADC.GPIO_Pin=GPIO_Pin_0;
PORT_ADC.GPIO_Mode=GPIO_Mode_AN; PORT_ADC.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOA,&PORT_ADC);
//ADC 参数配置
ADC_InitTypeDef ADC_InitStuctrue;
ADC_InitStuctrue.ADC_Resolution=ADC_Resolution_12b;//12位精度 ADC_InitStuctrue.ADC_ContinuousConvMode=DISABLE;//单次ADC
ADC_InitStuctrue.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None; ADC_InitStuctrue.ADC_DataAlign=ADC_DataAlign_Right;//数据右对齐
ADC_InitStuctrue.ADC_ScanDirection=ADC_ScanDirection_Backward;//数据覆盖
ADC_Init(ADC1,&ADC_InitStuctrue);
//配置ADC采样的通道和采样周期 //PA0对应ADC通道0
//注意,采集的数据是否准确与采样时间有关系
ADC_ChannelConfig(ADC1,ADC_Channel_0,ADC_SampleTime_239_5Cycles); //如果采集系统内部温度,则通道为16,同时要使能温度传感器
//ADC_ChannelConfig(ADC1,ADC_Channel_16,ADC_SampleTime_239_5Cycles); //ADC_TempSensorCmd(ENABLE);
//校准
ADC_GetCalibrationFactor(ADC1); //使能
ADC_Cmd(ADC1,ENABLE);
//等待ADC准备
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN)==RESET); //软件启动ADC转换
ADC_StartOfConversion(ADC1); //等待ADC完成
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET); //所得数据即为ADC数据
unsigned short adc_data=ADC_GetConversionValue(ADC1); /*
//如果采集的是16通道,即芯片温度,则温度的值如下
//下面这段代价,参考STM32F030数据手册(寄存器版)A.7.16 //出厂校准数据所存储的地址,30°C和110°C的ADC值
#define TEMP110_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7C2)) #define TEMP30_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7B8)) #define VDD_CALIB ((uint16_t) (330)) #define VDD_APPLI ((uint16_t) (300)) int32_t temperature;
temperature = (((int32_t) ADC1->DR * VDD_APPLI / VDD_CALIB)- (int32_t) *TEMP30_CAL_ADDR );
temperature = temperature * (int32_t)(110 - 30);
temperature = temperature / (int32_t)(*TEMP110_CAL_ADDR- *TEMP30_CAL_ADDR); temperature = temperature + 30; */
while(1) { } }
正在阅读:
STM32 学习笔记09-26
烷烃、烯烃、炔烃、苯的同系物的系统命名11-05
蓝田股份案例分析(终)11-05
学校围棋兴趣小组活动计划09-03
2015-2020年中国视频会议系统市场监测及发展机遇预测报告 - 图文05-06
淮南一中 刘静《大天而思之》+《狱中杂记》+《伶官传序》11-22
北师大八年级下册第六章《平行四边形》检测题(B)含答案12-08
201201批次网上考试试题大学英语(4) B 卷10-22
学生成绩管理信息系统设计与开发03-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 笔记
- 学习
- STM32
- 2015嵌入式应用实验讲义
- 毛泽东军事思想读后感
- 护理考编试题1
- 社会学概论第二次作业
- 机动车驾驶培训教练员从业资格理论考试题库 - 图文
- 文献检索期末考试复习题
- 4、《我的长生果》导学案及作业设计
- 人教版七年级下册英语10-12单元测试题(含答案)
- 06270技术经济学2013年1月试题和答案
- 工程结构抗震设计电子教案
- 财富系列之“鑫鑫向荣”人民币理财产品说明书
- 中国音乐简史部分
- 八年级英语期末考试试题
- 围墙围档广告文案大集合(800字)
- 2018国家公务员江苏面试名单
- 2014年注册咨询工程师考试第五科考试技巧最新考试试题库
- 2015年五年级上册语文竞赛试卷和答案
- 大学生的个人理想和社会理想
- 部门行政管理(在线作业三)
- 公务员法律基础知识考试试题集锦 附参考答案