完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
时钟初始化 clk_init()
CMU: 时钟管理单元LFXO:低频晶振 CMU_scillatorEnable(cmuOsc_FXO, true); 功能:使能 晶源Oscillator:使能晶源Oscillator: CMU_ClockSelectSet(cmuClock_LFA,cmSelect_LFXO);: 给企业分支选择参考或时钟功能 。LFA: LF A分支;A CMU_ClockSelectSet(cmuClockSelectSet(cmuC_LFB,cmSelect_LFXO);: 给企业分支选择参考或商标功能 LFB:LF B分支;B void clk_init(void){ CMU_ClockEnable(cmuClock_HFPER, true); /* 高频外设时钟 */ CMU_ClockEnable(cmuClock_CORELE, true); /* 低功耗时钟模块时钟 */ CMU_ClockEnable(cmuClock_GPIO, true); /* 通用输入/输出时钟 */ CMU_OscillatorEnable(cmuOsc_LFXO, true, true); CMU_ClockSelectSet(cmuClock_LFA,cmuSelect_LFXO); CMU_ClockSelectSet(cmuClock_LFB,cmuSelect_LFXO); }内存系统控制器初始化MSC_Init() MSC:内存系统控制器 (em_msc.c) #define MSC ((MSC_TypeDef ) MSC_BASE) /*MSC基指针/ 寄存器映射实现方式:将基地址转换成结构体地址,结构体定义了对应的映射映射(Register Map),偏移和芯片手册相对应。MSC_TIMEBASE喜欢就在其中。 6位:PERIOD生命周期——0-1US 1-5US(5US应该是被用在1MHz的AUXHFRCO品牌) 5:0位:被MSC对flash写和对话框进行时间(打节拍)的时基 void MSC_Init(void){#if defined(_MSC_TIMEBASE_MASK) uint32_t freq,cycles;#endif 解锁 MSC 设备/*MSC */ MSC-LOCK = MSC_UNLOCK_CODE; /* 禁止写入闪存禁止闪存写操作 */ MSC-》WRITECTRL &= ~MSC_WRITECTRL_WREN;#if 0#if defined( _MSC_TIMEBASE_MASK ) /* 根据选择的频率配置 MSC-》TIMEBASE */#ifdef EMLIB_THIN freq = 14000000 ;#else freq = CMU_ClockFreqGet(cmuClock_AUX);#endif if (freq 》 7000000) { /* 计算 1us 的时钟周期数作为基周期 */ freq = (freq * 11) / 10; 周期 = (频率 / 1000000) + 1; /* 配置闪存时序的时钟周期 */ MSC-》TIMEBASE = (MSC-》TIMEBASE & ~(_MSC_TIMEBASE_BASE_MASK | _MSC_TIMEBASE_PERIOD_MASK)) | MSC_TIMEBASE_PERIOD_1US | (循环《《 _MSC_TIMEBASE_BASE_SHIFT); } else {#ifndef EMLIB_THIN /* 以5us为基周期计算时钟周期数*/ freq = (freq * 5 * 11) / 10; 周期 = (频率 / 1000000) + 1; /* 配置闪存时序的时钟周期 */ MSC-》TIMEBASE = (MSC-》TIMEBASE & ~(_MSC_TIMEBASE_BASE_MASK | _MSC_TIMEBASE_PERIOD_MASK)) | MSC_TIMEBASE_PERIOD_5US | (cycles 《《 _MSC_TIMEBASE_BASE_SHIFT);#endif /* EMLIB_THIN */ }#endif#endif} ~(_MSC_TIMEBASE_BASE_MASK | _MSC_TIMEBASE_PERIOD_MASK)) | MSC_TIMEBASE_PERIOD_5US | (cycles 《《 _MSC_TIMEBASE_BASE_SHIFT);#endif /* EMLIB_THIN */ }#endif#endif} ~(_MSC_TIMEBASE_BASE_MASK | _MSC_TIMEBASE_PERIOD_MASK)) | MSC_TIMEBASE_PERIOD_5US | (cycles 《《 _MSC_TIMEBASE_BASE_SHIFT);#endif /* EMLIB_THIN */ }#endif#endif}串口初始化 uart_init() void uart_init(void){ LEUART_Init_TypeDef leuart0Init = { .enable = leuartEnable, /* 激活 LEUn_TX 引脚上的数据接收。*/ .refFreq = 0, /* 从 LEUART 时钟源继承时钟频率 */ .baudrate = 9600, /* Baudrate = 9600 bps */ .databits = leuartDatabits8, /* 每个 LEUART 帧包含 8 个数据位 */ .parity = leuartNoParity, /* 没有使用奇偶校验位 */ .stopbits = leuartStopbits1, /* 将帧中的停止位数量设置为 2 个比特周期 */ }; //CMU_ClockEnable(cmuClock_HFPER, true); //CMU_ClockEnable(cmuClock_CORELE, true); //CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO); //CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFRCO); CMU_ClockEnable(cmuClock_LEUART0,真);LEUART_Reset(LEUART0); //复位LEUART_Init(LEUART0, &leuart0Init); //初始化 /* 将 LEUART1 TX 引脚路由到 DMA 位置 1 */ LEUART0-》ROUTE = LEUART_ROUTE_TXPEN | LEUART_ROUTE_RXPEN | LEUART_ROUTE_LOCATION_LOC1; /* 启用 LEUART1 的 GPIO。TX 在 PB13 */ GPIO_PinModeSet(gpioPortB, /* GPIO 端口 */ 13, /* GPIO 端口号 */ gpioModePushPull, /* 引脚模式设置为推挽 */ 1); /* 高空闲状态 */ /* 启用 LEUART1 的 GPIO。RX 在 PB14 */ GPIO_PinModeSet(gpioPortB, /* Port */ 14, /* Port number */ gpioModeInputPull, /* 引脚模式设置为仅输入,拉动方向如下*/ 1); /* Pull direction is set to pull-up */ /* 有效接收数据中断使能 */ LEUART_IntEnable(LEUART0, LEUART_IEN_RXDATAV); LEUART0-》IFC = 0xffff;//清空所有的中断标志NVIC_EnableIRQ(LEUART0_IRQn); //初始化外部中断FifoInit(&uart_rx_fifo); //初始化长度}void uart_send_buf(uint8_t *buf, uint8_t length){ while (--) { LEUART_Tx(LEUART0, *buf++); }}void uart_send_string(char *str){ while (*str) { LEUART_Tx(LEUART0, *str++); }}//接收中断函数void LEUART0_IRQHandler(void) { static uint8_t data; __IO uint32_t leuartif; leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }} LEUART_IEN_RXDATAV); LEUART0-》IFC = 0xffff;//清空所有的中断标志NVIC_EnableIRQ(LEUART0_IRQn); //初始化外部中断FifoInit(&uart_rx_fifo); //初始化长度}void uart_send_buf(uint8_t *buf, uint8_t length){ while (--) { LEUART_Tx(LEUART0, *buf++); }}void uart_send_string(char *str){ while (*str) { LEUART_Tx(LEUART0, *str++); }}//接收中断函数void LEUART0_IRQHandler(void) { static uint8_t data; __IO uint32_t leuartif; leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }} LEUART_IEN_RXDATAV); LEUART0-》IFC = 0xffff;//清空所有的中断标志NVIC_EnableIRQ(LEUART0_IRQn); //初始化外部中断FifoInit(&uart_rx_fifo); //初始化长度}void uart_send_buf(uint8_t *buf, uint8_t length){ while (--) { LEUART_Tx(LEUART0, *buf++); }}void uart_send_string(char *str){ while (*str) { LEUART_Tx(LEUART0, *str++); }}//接收中断函数void LEUART0_IRQHandler(void) { static uint8_t data; __IO uint32_t leuartif; leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }} uint8_t length){ while (length--) { LEUART_Tx(LEUART0, *buf++); }}void uart_send_string(char *str){ while (*str) { LEUART_Tx(LEUART0, *str++); }}//接收中断函数void LEUART0_IRQHandler(void) { static uint8_t data; __IO uint32_t leuartif; leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }} uint8_t length){ while (length--) { LEUART_Tx(LEUART0, *buf++); }}void uart_send_string(char *str){ while (*str) { LEUART_Tx(LEUART0, *str++); }}//接收中断函数void LEUART0_IRQHandler(void) { static uint8_t data; __IO uint32_t leuartif; leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }} LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }} LEUART_IF_RXDATAV) { 数据 = LEUART0-》RXDATA; //接收到数据数据处理 }}ADC 初始化 adc_init() void adc_init(void){ ADC_Init_TypeDef init = ADC_INIT_DEFAULT; ADC_InitSingle_TypeDef singleInit = ADC_INITSINGLE_DEFAULT; CMU_ClockEnable(cmuClock_ADC0,真);init.timebase = ADC_TimebaseCalc(0); init.prescale = ADC_PrescaleCalc(7000000, 0); ADC_Init(ADC0, &init); singleInit.reference = adcRef2V5; //内部参考电压2.5V singleInit.input = adcSingleInpCh4; singleInit.resolution = adcRes12Bit; //12bit采样 singleInit.acqTime = adcAcqTime256; ADC_InitSingle(ADC0, &singleInit); //单次ADC转换 } |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:07 , Processed in 0.515824 second(s), Total 96, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号